Skip to content

Commit 903e837

Browse files
committed
Fix background color and tool icons
1 parent e5906d1 commit 903e837

4 files changed

Lines changed: 42 additions & 23 deletions

File tree

crates/spaceman-dmm/src/main.rs

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,11 @@ impl EditorScene {
351351
.with_clear_color(CLEAR_COLOR)
352352
.with_load_op(sdl3::gpu::LoadOp::CLEAR);
353353

354+
let render_pass = self
355+
.device
356+
.begin_render_pass(command_buffer, &[target], None)
357+
.expect("begin_render_pass");
358+
354359
if let Some(map) = self.maps.get_mut(self.map_current) {
355360
if let Some(hist) = map.state.hist() {
356361
let map_renderer = &mut self.map_renderer;
@@ -384,6 +389,8 @@ impl EditorScene {
384389
}
385390
}
386391
}
392+
393+
self.device.end_render_pass(render_pass);
387394
}
388395

389396
fn run_ui(&mut self, ui: &Ui, renderer: &mut ImRenderer) -> bool {
@@ -735,7 +742,7 @@ impl EditorScene {
735742
ui.same_line();
736743
}
737744

738-
if ui.tool_icon(i == self.tool_current, &tool.icon, &tool.name) {
745+
if ui.tool_icon(i == self.tool_current, &tool.icon, &tool.name, renderer) {
739746
self.tool_current = i;
740747
}
741748
if ui.is_item_hovered() {
@@ -1660,12 +1667,11 @@ fn detect_environment(path: &Path) -> Option<PathBuf> {
16601667
}
16611668

16621669
fn prepare_tool_icon(
1663-
_renderer: &mut ImRenderer,
1664-
_environment: Option<&Environment>,
1665-
_map_renderer: &mut map_renderer::MapRenderer,
1670+
renderer: &mut ImRenderer,
1671+
environment: Option<&Environment>,
1672+
map_renderer: &mut map_renderer::MapRenderer,
16661673
icon: tools::ToolIcon,
16671674
) -> tools::ToolIcon {
1668-
/*
16691675
use tools::ToolIcon;
16701676
match icon {
16711677
ToolIcon::Dmi {
@@ -1674,7 +1680,7 @@ fn prepare_tool_icon(
16741680
tint,
16751681
dir,
16761682
} => {
1677-
if let Some(env) = environment {
1683+
/*if let Some(env) = environment {
16781684
if let Some(id) = env.icons.get_index(icon.as_ref()) {
16791685
let icon = env.icons.get_icon(id);
16801686
if let Some([u1, v1, u2, v2]) = icon.uv_of(&icon_state, dir) {
@@ -1695,7 +1701,8 @@ fn prepare_tool_icon(
16951701
} else {
16961702
ToolIcon::None
16971703
}
1698-
} else {
1704+
} else*/
1705+
{
16991706
ToolIcon::Dmi {
17001707
icon,
17011708
icon_state,
@@ -1705,10 +1712,10 @@ fn prepare_tool_icon(
17051712
}
17061713
},
17071714
ToolIcon::EmbeddedPng { data } => {
1708-
if let Ok(tex) = dmi::texture_from_bytes(&mut map_renderer.factory, data) {
1709-
let samp = map_renderer.sampler.clone();
1715+
if let Ok(texture) = dmi::texture_from_bytes(&map_renderer.device, data) {
17101716
ToolIcon::Loaded {
1711-
tex: renderer.textures().insert((tex, samp)),
1717+
texture,
1718+
sampler: map_renderer.sampler.clone(),
17121719
uv0: [0.0, 0.0],
17131720
uv1: [1.0, 1.0],
17141721
tint: None,
@@ -1719,8 +1726,6 @@ fn prepare_tool_icon(
17191726
},
17201727
other => other,
17211728
}
1722-
*/
1723-
icon
17241729
}
17251730

17261731
// ---------------------------------------------------------------------------
@@ -1729,7 +1734,13 @@ fn prepare_tool_icon(
17291734
trait UiExt {
17301735
fn fits_width(&self, width: f32) -> usize;
17311736
fn objtree_menu<'e>(&self, env: &'e Environment, selection: &mut Option<TypeRef<'e>>);
1732-
fn tool_icon(&self, active: bool, icon: &tools::ToolIcon, fallback: &str) -> bool;
1737+
fn tool_icon(
1738+
&self,
1739+
active: bool,
1740+
icon: &tools::ToolIcon,
1741+
fallback: &str,
1742+
renderer: &mut ImRenderer,
1743+
) -> bool;
17331744
fn frame_color(&self, active: bool) -> [f32; 4];
17341745
}
17351746

@@ -1747,14 +1758,22 @@ impl UiExt for Ui {
17471758
objtree_menu_root(self, root, "mob", selection);
17481759
}
17491760

1750-
fn tool_icon(&self, active: bool, icon: &tools::ToolIcon, fallback: &str) -> bool {
1761+
fn tool_icon(
1762+
&self,
1763+
active: bool,
1764+
icon: &tools::ToolIcon,
1765+
fallback: &str,
1766+
renderer: &mut ImRenderer,
1767+
) -> bool {
17511768
if let &tools::ToolIcon::Loaded {
1752-
tex,
1769+
ref texture,
1770+
ref sampler,
17531771
uv0,
17541772
uv1,
17551773
tint,
17561774
} = icon
17571775
{
1776+
let tex = renderer.push_texture(texture.clone(), sampler.clone());
17581777
Image::new(tex, [32.0, 32.0])
17591778
.uv0(uv0)
17601779
.uv1(uv1)

crates/spaceman-dmm/src/support.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ pub fn run(title: &str) {
167167
.expect("imgui render");
168168

169169
// Flip it.
170-
command_buffer.submit();
170+
command_buffer.submit().expect("CommandBuffer::submit");
171171
} else {
172172
// Can be triggered by window being minimized on some platforms.
173173
command_buffer.cancel();

crates/spaceman-dmm/src/tools/mod.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
//! Placement and editing tools which appear in the workbench.
22
3-
use std::path::PathBuf;
4-
5-
use imgui::*;
6-
3+
use crate::{Environment, History, ImRenderer};
74
use dmm_tools::dmm::Prefab;
85
use dreammaker::dmi;
96
use dreammaker::objtree::ObjectTree;
10-
11-
use crate::{Environment, History, ImRenderer};
7+
use imgui::*;
8+
use sdl3::gpu::{Sampler, Texture};
9+
use std::path::PathBuf;
1210

1311
mod place;
1412

@@ -34,7 +32,8 @@ pub enum ToolIcon {
3432
data: &'static [u8],
3533
},
3634
Loaded {
37-
tex: TextureId,
35+
texture: Texture<'static>,
36+
sampler: Sampler,
3837
uv0: [f32; 2],
3938
uv1: [f32; 2],
4039
tint: Option<[f32; 4]>,

crates/spaceman-dmm/src/tools/place.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ impl ToolBehavior for Place {
4848
i == *pal_current,
4949
pal.icon.prepare(Some(env), ctx),
5050
&im_str!("{}", pal.fab.path),
51+
ctx.renderer,
5152
);
5253
if ui.is_item_hovered() {
5354
ui.tooltip_text(im_str!("{:#}", pal.fab));

0 commit comments

Comments
 (0)