pittore 0.2.4

Simple toolkit for 2D visualization based on wgpu.
Documentation
mod backend;
mod context;
mod input;
mod render;
pub mod util;

pub mod prelude {
    pub use crate::{
        backend::{RenderCommand, RenderState},
        context::Context,
        render::*,
        PittoreApp,
    };
    pub use glam::{vec2, vec3, vec4, Mat4, Quat, Vec2, Vec3, Vec4};
    pub use winit::{dpi::PhysicalPosition, event::MouseButton, keyboard::KeyCode};
}

pub use backend::*;
pub use context::*;
use glam::UVec2;
use winit::{event_loop::EventLoop, window::WindowAttributes};

pub fn run<A: PittoreApp + 'static>(title: &'static str, app: A) {
    run_with_options(app, WindowAttributes::default().with_title(title));
}

pub fn run_with_options<A: PittoreApp + 'static>(app: A, window_attribs: WindowAttributes) {
    #[cfg(target_arch = "wasm32")]
    {
        console_error_panic_hook::set_once();
    }

    pollster::block_on(async {
        let event_loop = EventLoop::new().unwrap();

        let mut window_state = PittoreBackend::new(app, window_attribs);
        let _ = event_loop.run_app(&mut window_state);
    });
}

pub trait PittoreApp {
    /// Initialization function.
    ///
    /// Called once at startup before the first call of `update` method. Note that changes to render layers made in this method will be discarded.
    #[allow(unused_variables)]
    fn init(&mut self, c: &mut Context) {}

    fn update(&mut self, c: &mut Context);

    fn resize(&mut self, _physical_size: UVec2) {}
}