gapp-winit 0.12.4

Abstract event loop library for winit-based applications with OpenGL and wgpu backends, integrating gapp traits for clean separation of input, update, render, and present
Documentation

gapp-winit

Crates.io Docs License

An abstract event loop library for winit-based applications with support for OpenGL/glutin and wgpu backends. Integrates seamlessly with gapp traits for clean separation of input, update, render, and present.

Supports native (Windows/Linux/macOS) and WASM. Fixed-timestep FPS cap, automatic resize handling, multi-window support.

Features

  • Multi-window: Manage multiple windows via Windows<R> collection, with per-window event routing.
  • Backend-agnostic: Switch between OpenGL and wgpu via Cargo features.
  • Trait-based: Implement WindowInput, Present, Render (gapp), Update (gapp).
  • Cross-platform: Full WASM support (HTML canvas).
  • Performance: Fixed timestep, on-demand redraw, FPS sleep (native).
Feature OpenGL wgpu
Native
WASM
Default ❎️

Quickstart

For reference, have a look at the template program. It also can be used as a base for your program.

Traits Overview

  • WindowInput<C, R>: Handle all WindowEvents (post-resize/redraw) with WindowId and &mut Windows<R>. Call event_loop.exit() on close. Optional device_input hook for raw DeviceEvents (e.g. relative mouse motion), no-op by default.
  • Present<R>: Submit frame per window (e.g., queue.submit(), surface.swap_buffers()).
  • Render<R> / Update (from gapp): Standard render/update loop, called per window.
  • Windows<R>: Collection mapping WindowId(WindowData, R). Insert/remove windows dynamically.

Resize is auto-handled per window.

FPS can be supplied to run.