Skip to content

wick3dr0se/egor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

93 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

egor

A dead simple cross-platform 2D graphics engine

Screenshot


Why Egor?

Egor is dead simple, lightweight, and cross-platform. The same code runs on native and web (WASM), with minimal boilerplate. Egor is built from small, composable crates on top of modern graphics and windowing abstractions

Egor provides essentials for 2D apps and games:

  • Draw shapes and textures efficiently
  • Handle input (keyboard & mouse)
  • Move things with camera/world transforms
  • Render text and simple fonts
  • Build interactive UIs with optional egui integration
  • Optionally hot-reload during development

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, check out 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

Compile with the hot_reload feature enabled. Hot reload will automatically wrap AppHandler::update when the feature is active

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

About

A dead simple cross-platform 2D graphics engine

Topics

Resources

License

Stars

Watchers

Forks

Contributors 5