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 {
#[allow(unused_variables)]
fn init(&mut self, c: &mut Context) {}
fn update(&mut self, c: &mut Context);
fn resize(&mut self, _physical_size: UVec2) {}
}