use glam::vec3; use vert_framework::{ app::App, flow::Flow, modules::{ assets::fetchable_asset::{AssetSource, ImageAsset, LoadingAsset}, graphics::elements::color_mesh::SingleColorMesh, Modules, }, state::StateT, }; pub enum MyImg { Loading(LoadingAsset), Loaded(ImageAsset), Error(anyhow::Error), } pub struct MyState { img: MyImg, } impl StateT for MyState { async fn initialize(modules: &mut Modules) -> anyhow::Result { // let system_id = modules.add_system(); let source: AssetSource = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ6ttcadfmj7-DuD3JDobVHUXcGFNcreMPMjKm3nq-keA&s".into(); dbg!(&source); let loading_asset = source.fetch_in_background(); Ok(MyState { img: MyImg::Loading(loading_asset), }) } fn update(&mut self, modules: &mut Modules) -> Flow { let label = match &self.img { MyImg::Loading(_) => "Loading".to_string(), MyImg::Loaded(img) => format!("Loaded, dims: {:?}", img.rgba.dimensions()), MyImg::Error(err) => format!("Error: {err}",), }; egui::Window::new("Asset test").show(&mut modules.egui(), |ui| { ui.label(label); }); match &mut self.img { MyImg::Loading(l) => { match l.get() { Some(Ok(img)) => { println!( "Received image after {} seconds", modules.time().total_secs() ); self.img = MyImg::Loaded(img); } Some(Err(err)) => { println!("Received error: {err}"); self.img = MyImg::Error(err); } None => {} }; } _ => {} } Flow::Continue } fn prepare(&mut self, modules: &wgpu::Queue, encoder: &mut wgpu::CommandEncoder) {} } fn main() { App::::run().unwrap(); }