Armageddon is a game engine built in Rust using Specs as the ECS. It was created to give lower level access to operating system resources to game programmers.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Tohru 343bdc1e5f mandelbrot rendering 2 years ago
shaders/src mandelbrot rendering 2 years ago
src mandelbrot rendering 2 years ago
.gitignore Removed cargo lock 2 years ago
Cargo.lock mandelbrot rendering 2 years ago
Cargo.toml mandelbrot rendering 2 years ago one more time 2 years ago Sets up new initilization step 2 years ago


The Armageddon engine was designed as a desire to get lower level control. This was done as a way to implement VR with Rust (by openxr). All graphics interactions are done through calls to either Vulkan or OpenGL. As of now there's no plan for Metal as the goal for Armageddon supporting VR is the driving force of it's existence. As of now, Armageddon is not a library it's a template for future games. This might change in the future as time goes on.

There's a basic roadmap which will be displayed below.

  • Wayland Support
  • X11 Support
  • Windows Support
  • Vulkan Backend
  • OpenGL Backend
  • OpenXR integration
  • Make rythem game
  • Make VR game

Unsafe usage

Any function that if improperly handled in a safe environment fails a vulkan validation check or is not destroyed must be marked with unsafe. If the function returns data, then that data is also under the same scruteny.

fn create_instance() -> Instance {
    let instance: ash::Instance = unsafe {
            .create_instance(&create_info, None)
            .expect("Failed to create instance!")


This function will not be alowed into the code base as someone can run create_instance() in a safe environment and let instance be dropped withou calling destroy_instance.

By the time everything reaches Specs then all data must also follow those constraints. Systems, however, can still call unsafe blocks but those blocks and their outputs must also abide by those constraints.