verdant

A rendering and windowing library built on winit and wgpu, aiming to be lightweight and performant.
Note: Verdant is a work in progress. The API is unstable, and 3D support is planned for the future.
Installation
Add this to your Cargo.toml:
[dependencies]
verdant = "0.2.2"
Cargo Features
By default, Verdant includes image and text features. If you don't need asset loading and/or text and want a lighter dependency tree, you can disable them:
[dependencies]
verdant = { version = "0.2.2", default-features = false }
Examples
1. Minimal Window
The absolute bare minimum code to open a window and keep it alive.
use verdant::{Renderer, RendererResult, WindowEvent};
fn main() -> RendererResult<()> {
let mut renderer = Renderer::new()?;
renderer.create_window("minimal verdant example", 500, 500);
while renderer.is_running() {
for (id, event) in renderer.poll() {
if event == WindowEvent::CloseRequested {
renderer.close_window(id);
}
}
}
Ok(())
}
2. Drawing
Verdant supports both imperative (stateful) and declarative (builder-pattern) drawing. You can mix them freely.
use verdant::{Renderer, RendererResult, WindowEvent, rgb, shapes::{Drawable, Rect}};
fn main() -> RendererResult<()> {
let mut renderer = Renderer::new()?;
let window_id = renderer.create_window("minimal shapes", 800, 600);
while renderer.is_running() {
for (id, event) in renderer.poll() {
if event == WindowEvent::CloseRequested {
renderer.close_window(id);
}
}
if let Some(window) = renderer.get_window(window_id) {
window.background(rgb(0.15, 0.15, 0.15));
window.fill(rgb(0.8, 0.3, 0.3));
window.ellipse(400., 300., 100., 100.);
Rect::at(100., 100.)
.size(150., 150.)
.fill(rgb(0.3, 0.6, 0.8))
.draw(window);
}
renderer.flush()?;
}
Ok(())
}