tirbofish/dropbear · diff
fix: actually builds and displays a texture properly. the dir light is weird tho. Unverified
@@ -72,6 +72,7 @@ semver = { version = "1.0", features = ["serde"] } rapier3d = { version = "0.32", features = [ "simd-stable", "serde-serialize" ] } cbindgen = { version = "0.29.2" } postcard = { version = "1.1"} +pollster = "0.4" [workspace.dependencies.image] version = "0.25" @@ -42,6 +42,7 @@ ron.workspace = true dashmap.workspace = true typetag.workspace = true postcard.workspace = true +pollster.workspace = true [target.'cfg(not(target_os = "android"))'.dependencies] rfd.workspace = true @@ -30,7 +30,6 @@ use dropbear_future_queue::FutureQueue; use egui::TextureId; use egui_wgpu::ScreenDescriptor; use env_logger::Builder; -use futures::executor::block_on; use gilrs::{Gilrs, GilrsBuilder}; use log::LevelFilter; use parking_lot::{Mutex, RwLock}; @@ -138,11 +137,16 @@ impl State { }) .await?; + let limits = wgpu::Limits { + max_bind_groups: 8, + ..Default::default() + }; + let (device, queue) = adapter .request_device(&wgpu::DeviceDescriptor { label: Some(format!("{} graphics device", title).as_str()), required_features: wgpu::Features::empty(), - required_limits: wgpu::Limits::default(), + required_limits: limits, experimental_features: unsafe { ExperimentalFeatures::enabled() }, memory_hints: Default::default(), trace: wgpu::Trace::Off, @@ -840,7 +844,7 @@ impl App { let window_id = window.id(); - let mut win_state = block_on(State::new(window, self.instance.clone(), self.future_queue.clone()))?; + let mut win_state = pollster::block_on(State::new(window, self.instance.clone(), self.future_queue.clone()))?; let size = win_state.window.inner_size(); win_state.resize(size.width, size.height); @@ -956,6 +960,8 @@ impl ApplicationHandler for App { match event { WindowEvent::Resized(size) => { state.resize(size.width, size.height); + + *graphics = Arc::new(graphics::SharedGraphicsContext::from_state(state)); } WindowEvent::RedrawRequested => { self.future_queue.poll(); @@ -10,7 +10,7 @@ readme = "README.md" [dependencies] eucalyptus-core = { path = "../eucalyptus-core", features = ["editor"] } magna-carta = { path = "../magna-carta" } -redback-runtime = { path = "../redback-runtime" } +redback-runtime = { path = "../redback-runtime", features = ["debug"]} anyhow.workspace = true app_dirs2.workspace = true @@ -361,6 +361,24 @@ impl Scene for Editor { self.color = clear_color; eucalyptus_core::logging::render(&graphics.get_egui_context()); + { + let _ = frame_ctx.encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: Some("editor surface clear pass"), + color_attachments: &[Some(wgpu::RenderPassColorAttachment { + view: &frame_ctx.view, + depth_slice: None, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Clear(clear_color), + store: wgpu::StoreOp::Store, + }, + })], + depth_stencil_attachment: None, + occlusion_query_set: None, + timestamp_writes: None, + }); + } + let cam = { let c = self.active_camera.lock(); *c @@ -470,7 +488,7 @@ impl Scene for Editor { .begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("light cube render pass"), color_attachments: &[Some(wgpu::RenderPassColorAttachment { - view: &frame_ctx.view, + view: &graphics.viewport_texture.view, depth_slice: None, resolve_target: None, ops: wgpu::Operations { @@ -515,7 +533,7 @@ impl Scene for Editor { .begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("model render pass"), color_attachments: &[Some(wgpu::RenderPassColorAttachment { - view: &frame_ctx.view, + view: &graphics.viewport_texture.view, depth_slice: None, resolve_target: None, ops: wgpu::Operations { @@ -565,7 +583,7 @@ impl Scene for Editor { .begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("model render pass"), color_attachments: &[Some(wgpu::RenderPassColorAttachment { - view: &frame_ctx.view, + view: &graphics.viewport_texture.view, depth_slice: None, resolve_target: None, ops: wgpu::Operations {