egor 0.4.0

A dead simple 2D graphics engine
Documentation

Screenshot


Why Egor?

  • Stupid Simple – You can grok the whole engine without falling into a rabbit hole
  • Cross-Platform – Same code runs native & on the web via WASM
  • Zero Boilerplate – Primitives, textures, input, text & more without writing a book
  • Extensible & Minimal – If it's not required, it’s probably not included (by default)

Features

  • Primitives
  • Textures
  • Input Handling
  • Camera System
  • Text/Fonts

Platform Support

Target Backend(s) Status
Windows DX12, Vulkan, OpenGL ✅ Stable
MacOS Metal, Vulkan (MoltenVK) ✅ Stable
Linux Vulkan, OpenGL ✅ Stable
Web (WASM) WebGPU, WebGL2 ✅ Working

[!NOTE] Mobile (Android/iOS) isn't (intended to be) supported & neither is touch input

Getting Started

Add egor to your project:

cargo add egor

Example:

let mut position = Vec2::ZERO;

App::new()
    .title("Egor Stateful Rectangle")
    .run(move |gfx, input, timer| {
        let dx = input.key_held(KeyCode::ArrowRight) as i8
            - input.key_held(KeyCode::ArrowLeft) as i8;
        let dy =
            input.key_held(KeyCode::ArrowDown) as i8 - input.key_held(KeyCode::ArrowUp) as i8;

        position += vec2(dx as f32, dy as f32) * 100.0 * timer.delta;

        gfx.rect().at(position).color(Color::RED);
    })

To see more of egor in action, checkout demos/

[!TIP] Running a demo for WASM? You’ll need to move index.html into a demo, or just use the included run.sh script (see usage). It simplifies running native, WASM & hot-reload builds

Running a Native Build

Simply run cargo:

cargo run

Running a WASM Build

Run trunk (defer to Trunk docs for setup):

trunk serve

Try Out Subsecond Hot-reloading

Add egor_subsecond:

cargo add egor_subsecond --git https://github.com/wick3dr0se/egor --package egor_subsecond
App:new().run(with_hot_reload(|gfx, input, timer| {...}))

Run dioxus-cli (defer to Dioxus CLI docs for setup):

dx serve --hot-patch

[!NOTE] Subsecond hot-reloading is experimental; native is working

Contributing

egor is moving fast.. Got an idea, bugfix, or question? Check out some issues, open a new one, drop a PR, or come hang in Discord


egor is maintained with ❤️ by Open Source Force