kitgit

tirbofish/dropbear · diff

0394e11 · Thribhu K

fix: actually builds and displays a texture properly. the dir light is weird tho. Unverified

diff --git a/Cargo.toml b/Cargo.toml
index c8e6ee3..6652f99 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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"
diff --git a/crates/dropbear-engine/Cargo.toml b/crates/dropbear-engine/Cargo.toml
index ae0863a..b80cba2 100644
--- a/crates/dropbear-engine/Cargo.toml
+++ b/crates/dropbear-engine/Cargo.toml
@@ -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
diff --git a/crates/dropbear-engine/src/lib.rs b/crates/dropbear-engine/src/lib.rs
index 6e85de7..efad8e7 100644
--- a/crates/dropbear-engine/src/lib.rs
+++ b/crates/dropbear-engine/src/lib.rs
@@ -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();
diff --git a/crates/eucalyptus-editor/Cargo.toml b/crates/eucalyptus-editor/Cargo.toml
index a8570c7..b43f599 100644
--- a/crates/eucalyptus-editor/Cargo.toml
+++ b/crates/eucalyptus-editor/Cargo.toml
@@ -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
diff --git a/crates/eucalyptus-editor/src/editor/scene.rs b/crates/eucalyptus-editor/src/editor/scene.rs
index 9c6ac22..ceb5aae 100644
--- a/crates/eucalyptus-editor/src/editor/scene.rs
+++ b/crates/eucalyptus-editor/src/editor/scene.rs
@@ -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 {