Skip to content

Commit 6aaa021

Browse files
committed
Preview gradient in UI
1 parent 7a7552b commit 6aaa021

2 files changed

Lines changed: 21 additions & 7 deletions

File tree

‎engine/src/renderer/passes/dear_imgui_renderer.rs‎

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use sourcerenderer_core::gpu::{Texture as _, TexturePlane};
1010
use sourcerenderer_core::{Matrix4, Vec2, Vec2I, Vec2UI, Vec3, Vec3UI};
1111
use std::collections::HashMap;
1212
use std::sync::Arc;
13+
use crate::asset::{AssetHandle, AssetType};
1314

1415
pub struct DearImguiRenderer {
1516
next_id: u64,
@@ -19,6 +20,8 @@ pub struct DearImguiRenderer {
1920
}
2021

2122
impl DearImguiRenderer {
23+
const IMGUI_IDENTIFY_MASK: u64 = 1 << 63;
24+
2225
pub fn new(
2326
_device: &Device,
2427
_resources: &mut RendererResources,
@@ -207,7 +210,7 @@ impl DearImguiRenderer {
207210
Some(&format!("DearImgui view {}", id)),
208211
);
209212

210-
let imgui_id = dear_imgui_rs::TextureId::new(id);
213+
let imgui_id = dear_imgui_rs::TextureId::new(id | Self::IMGUI_IDENTIFY_MASK);
211214
self.textures
212215
.insert(texture_request.texture(), (imgui_id, view));
213216

@@ -423,12 +426,18 @@ impl DearImguiRenderer {
423426

424427
let view = match texture {
425428
dear_imgui_rs::TextureBinding::Legacy(id) => {
426-
log::warn!("Binding with legacy texture id: {:?}", id);
427-
self.textures
428-
.iter()
429-
.find(|(_, (stored_id, _))| id == stored_id)
430-
.map(|(_, (_, texture))| texture)
431-
.unwrap()
429+
if (id.id() & Self::IMGUI_IDENTIFY_MASK) != 0 {
430+
log::warn!("Got a managed texture in the legacy path.");
431+
self.textures
432+
.iter()
433+
.find(|(_, (stored_id, _))| id == stored_id)
434+
.map(|(_, (_, texture))| texture)
435+
.unwrap()
436+
} else {
437+
let asset_handle = AssetHandle::new(id.id(), AssetType::Texture);
438+
let texture = assets_readonly.get_texture_opt(asset_handle.into());
439+
texture.map(|t| &t.view).unwrap_or(&assets_readonly.get_placeholder_texture_black().view)
440+
}
432441
}
433442
dear_imgui_rs::TextureBinding::Managed(id) => {
434443
&(self.textures.get(id).unwrap().1)

‎game/src/uni_project/ui.rs‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,11 @@ fn color_gradient<const STEPS: usize>(ui: &dear_imgui_rs::Ui, greyscale: bool, p
306306
let space = unsafe { ui.style() }.item_spacing()[0];
307307
let size = (ui.content_region_avail()[0] - ((STEPS - 1) as f32 * space)) * (1.0f32 / (STEPS as f32));
308308

309+
let asset_handle: AssetHandle = texture_handle.into();
310+
let imgui_texture_id = dear_imgui_rs::TextureId::new(asset_handle.index());
311+
let imgui_texture_ref = dear_imgui_rs::TextureRef::from(imgui_texture_id);
312+
ui.image(imgui_texture_ref, [ui.content_region_avail()[0], ui.frame_height() * 2.0f32]);
313+
309314
let mut changed = false;
310315

311316
for i in 0..STEPS {

0 commit comments

Comments
 (0)