From 778f49314f7a9ecc876f4e445c1be4151b535b7f Mon Sep 17 00:00:00 2001 From: nanoqsh Date: Thu, 18 Jul 2024 11:55:42 +0500 Subject: [PATCH] Make update from view --- dunge/src/lib.rs | 5 +++- examples/cube/src/lib.rs | 55 +++++++++++++++++++--------------------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/dunge/src/lib.rs b/dunge/src/lib.rs index bbef599..dd7fe08 100644 --- a/dunge/src/lib.rs +++ b/dunge/src/lib.rs @@ -33,7 +33,10 @@ pub mod prelude { }; #[cfg(feature = "winit")] - pub use crate::el::{Control, KeyCode, Then}; + pub use crate::{ + el::{Control, KeyCode, Then}, + window::View, + }; } pub use { diff --git a/examples/cube/src/lib.rs b/examples/cube/src/lib.rs index 4ce68ad..cdbcc25 100644 --- a/examples/cube/src/lib.rs +++ b/examples/cube/src/lib.rs @@ -1,15 +1,12 @@ type Error = Box; pub async fn run(ws: dunge::window::WindowState) -> Result<(), Error> { - use { - dunge::{ - color::Rgba, - glam::{Mat4, Quat, Vec3}, - prelude::*, - sl::{Groups, InVertex, Out}, - uniform::Uniform, - }, - std::cell::OnceCell, + use dunge::{ + color::Rgba, + glam::{Mat4, Quat, Vec3}, + prelude::*, + sl::{Groups, InVertex, Out}, + uniform::Uniform, }; #[repr(C)] @@ -112,32 +109,32 @@ pub async fn run(ws: dunge::window::WindowState) -> Result<(), Error> { cx.make_mesh(&data) }; - let upd = { + let make_upd = { let cx = cx.clone(); - move |ctrl: &Control| { - for key in ctrl.pressed_keys() { - if key.code == KeyCode::Escape { - return Then::Close; + move |view: &View| { + let layer = cx.make_layer(&cube_shader, view.format()); + let upd = move |ctrl: &Control| { + for key in ctrl.pressed_keys() { + if key.code == KeyCode::Escape { + return Then::Close; + } } - } - r += ctrl.delta_time().as_secs_f32() * 0.5; - let mat = transform(r, ctrl.size()); - uniform.update(&cx, mat); - Then::Run - } - }; + r += ctrl.delta_time().as_secs_f32() * 0.5; + let mat = transform(r, ctrl.size()); + uniform.update(&cx, mat); + Then::Run + }; - let draw = { - let cx = cx.clone(); - let layer = OnceCell::default(); - move |mut frame: Frame| { - let layer = layer.get_or_init(|| cx.make_layer(&cube_shader, frame.format())); - let opts = Rgba::from_standard([0.1, 0.05, 0.15, 1.]); - frame.layer(layer, opts).bind(&bind_transform).draw(&mesh); + let draw = move |mut frame: Frame| { + let opts = Rgba::from_standard([0.1, 0.05, 0.15, 1.]); + frame.layer(&layer, opts).bind(&bind_transform).draw(&mesh); + }; + + dunge::update(upd, draw) } }; - ws.run(cx, dunge::update(upd, draw))?; + ws.run(cx, dunge::from_view(make_upd))?; Ok(()) }