mess with gui

This commit is contained in:
2026-02-02 23:25:27 +00:00
parent 1c4fb0c130
commit a7c475b0a2
3 changed files with 92 additions and 71 deletions
+23 -11
View File
@@ -72,7 +72,7 @@ impl Default for GState {
} }
fn draw_position(ui: &mut Ui, position: &mut Position) { fn draw_position(ui: &mut Ui, position: &mut Position) {
ui.heading("Position"); ui.collapsing("Position", |ui| {
ui.add(egui::Slider::new(&mut position.pos.x, -100.0..=100.0).text("Position.x")); ui.add(egui::Slider::new(&mut position.pos.x, -100.0..=100.0).text("Position.x"));
ui.add(egui::Slider::new(&mut position.pos.y, -100.0..=100.0).text("Position.y")); ui.add(egui::Slider::new(&mut position.pos.y, -100.0..=100.0).text("Position.y"));
ui.add(egui::Slider::new(&mut position.pos.z, -100.0..=100.0).text("Position.z")); ui.add(egui::Slider::new(&mut position.pos.z, -100.0..=100.0).text("Position.z"));
@@ -82,10 +82,11 @@ fn draw_position(ui: &mut Ui, position: &mut Position) {
ui.add(egui::Slider::new(&mut position.scale.x, 0.0..=2.0).text("Scale.x")); ui.add(egui::Slider::new(&mut position.scale.x, 0.0..=2.0).text("Scale.x"));
ui.add(egui::Slider::new(&mut position.scale.y, 0.0..=2.0).text("Scale.y")); ui.add(egui::Slider::new(&mut position.scale.y, 0.0..=2.0).text("Scale.y"));
ui.add(egui::Slider::new(&mut position.scale.z, 0.0..=2.0).text("Scale.z")); ui.add(egui::Slider::new(&mut position.scale.z, 0.0..=2.0).text("Scale.z"));
});
} }
fn draw_material(ui: &mut Ui, material: &mut Material) { fn draw_material(ui: &mut Ui, material: &mut Material) {
ui.heading("Material"); ui.collapsing("Material", |ui| {
ui.add(egui::Slider::new(&mut material.colour.x, 0.0..=1.0).text("Colour.r")); ui.add(egui::Slider::new(&mut material.colour.x, 0.0..=1.0).text("Colour.r"));
ui.add(egui::Slider::new(&mut material.colour.y, 0.0..=1.0).text("Colour.g")); ui.add(egui::Slider::new(&mut material.colour.y, 0.0..=1.0).text("Colour.g"));
ui.add(egui::Slider::new(&mut material.colour.z, 0.0..=1.0).text("Colour.b")); ui.add(egui::Slider::new(&mut material.colour.z, 0.0..=1.0).text("Colour.b"));
@@ -97,7 +98,10 @@ fn draw_material(ui: &mut Ui, material: &mut Material) {
ui.add(egui::Slider::new(&mut material.sheen, 0.0..=1.0).text("Sheen")); ui.add(egui::Slider::new(&mut material.sheen, 0.0..=1.0).text("Sheen"));
ui.add(egui::Slider::new(&mut material.sheen_tint, 0.0..=1.0).text("Sheen tint")); ui.add(egui::Slider::new(&mut material.sheen_tint, 0.0..=1.0).text("Sheen tint"));
ui.add(egui::Slider::new(&mut material.clear_coat, 0.0..=1.0).text("Clear Coat")); ui.add(egui::Slider::new(&mut material.clear_coat, 0.0..=1.0).text("Clear Coat"));
ui.add(egui::Slider::new(&mut material.clear_coat_gloss, 0.0..=1.0).text("Clear Coat Gloss")); ui.add(
egui::Slider::new(&mut material.clear_coat_gloss, 0.0..=1.0).text("Clear Coat Gloss"),
);
});
} }
pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) { pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
@@ -127,12 +131,13 @@ pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
ui.heading(format!("Meshes ({})", meshes_len)); ui.heading(format!("Meshes ({})", meshes_len));
let mut meshdel = vec![]; let mut meshdel = vec![];
for mesh in &mut state.meshes { for mesh in &mut state.meshes {
ui.label(mesh.name.clone()); ui.collapsing(mesh.name.clone(), |ui| {
if meshes_len > 1 || csg_len > 0 { if meshes_len > 1 || csg_len > 0 {
meshdel.push(ui.small_button("remove mesh").clicked()); meshdel.push(ui.small_button("remove mesh").clicked());
} }
draw_position(ui, &mut mesh.position); draw_position(ui, &mut mesh.position);
draw_material(ui, &mut mesh.material); draw_material(ui, &mut mesh.material);
});
} }
for i in meshdel for i in meshdel
.into_iter() .into_iter()
@@ -145,7 +150,7 @@ pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
let mut csgdel = vec![]; let mut csgdel = vec![];
for csg in &mut state.csg { for csg in &mut state.csg {
let mut csg = csg.write().unwrap(); let mut csg = csg.write().unwrap();
ui.label(csg.name.clone()); ui.collapsing(csg.name.clone(), |ui| {
if meshes_len > 0 || csg_len > 1 { if meshes_len > 0 || csg_len > 1 {
csgdel.push(ui.small_button("remove csg").clicked()); csgdel.push(ui.small_button("remove csg").clicked());
} }
@@ -153,7 +158,9 @@ pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
draw_material(ui, &mut csg.material); draw_material(ui, &mut csg.material);
ui.horizontal(|ui| { ui.horizontal(|ui| {
ui.label("Subdivision"); ui.label("Subdivision");
for x in MINUMUM_SUBDIVISION.ilog2()..=MAXIMUM_SUBDIVISION.ilog2() { for x in
MINUMUM_SUBDIVISION.ilog2()..=MAXIMUM_SUBDIVISION.ilog2()
{
let subdivision = 1 << x; let subdivision = 1 << x;
ui.selectable_value( ui.selectable_value(
&mut csg.subdivision, &mut csg.subdivision,
@@ -162,6 +169,7 @@ pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
); );
} }
}); });
});
} }
for i in csgdel for i in csgdel
.into_iter() .into_iter()
@@ -178,8 +186,8 @@ pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
} }
ui.heading(format!("Lights ({})", state.lights.len())); ui.heading(format!("Lights ({})", state.lights.len()));
let mut lightdel = vec![]; let mut lightdel = vec![];
for light in &mut state.lights { for (i, light) in state.lights.iter_mut().enumerate() {
ui.label("Light"); ui.collapsing(format!("Light {i}"), |ui| {
lightdel.push(ui.small_button("remove light").clicked()); lightdel.push(ui.small_button("remove light").clicked());
ui.add( ui.add(
egui::Slider::new(&mut light.pos.x, -100.0..=100.0) egui::Slider::new(&mut light.pos.x, -100.0..=100.0)
@@ -194,14 +202,18 @@ pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
.text("Position.z"), .text("Position.z"),
); );
ui.add( ui.add(
egui::Slider::new(&mut light.colour.x, 0.0..=1.0).text("Colour.r"), egui::Slider::new(&mut light.colour.x, 0.0..=1.0)
.text("Colour.r"),
); );
ui.add( ui.add(
egui::Slider::new(&mut light.colour.y, 0.0..=1.0).text("Colour.g"), egui::Slider::new(&mut light.colour.y, 0.0..=1.0)
.text("Colour.g"),
); );
ui.add( ui.add(
egui::Slider::new(&mut light.colour.z, 0.0..=1.0).text("Colour.b"), egui::Slider::new(&mut light.colour.z, 0.0..=1.0)
.text("Colour.b"),
); );
});
} }
for i in lightdel for i in lightdel
.into_iter() .into_iter()
+10 -1
View File
@@ -134,7 +134,16 @@ pub(crate) fn load_obj(
// index Uses the hash map to check that we're not duplicating unnecessarily // index Uses the hash map to check that we're not duplicating unnecessarily
for g in &object.objects[0].groups { for g in &object.objects[0].groups {
for p in &g.polys { for p in &g.polys {
for v in &p.0 { if p.0.len() < 3 {
continue;
}
let mut verts = vec![];
for i in 2..p.0.len() {
verts.push(p.0[0]);
verts.push(p.0[i - 1]);
verts.push(p.0[i]);
}
for v in &verts {
//trace!("{:?}", v); //trace!("{:?}", v);
let mapping = ((v.0) as u32, (v.2.unwrap_or(0)) as u32); let mapping = ((v.0) as u32, (v.2.unwrap_or(0)) as u32);
if let Some(&exist) = temp_hash_map.get(&mapping) { if let Some(&exist) = temp_hash_map.get(&mapping) {
+2 -2
View File
@@ -7,7 +7,7 @@ use std::{
}; };
use foldhash::{HashMap, HashMapExt}; use foldhash::{HashMap, HashMapExt};
use glam::{EulerRot, Mat4, Vec3}; use glam::Vec3;
use log::info; use log::info;
use rand::{Rng, SeedableRng, rngs::SmallRng}; use rand::{Rng, SeedableRng, rngs::SmallRng};
use rspirv::{binary::Assemble, dr::Module}; use rspirv::{binary::Assemble, dr::Module};
@@ -139,7 +139,7 @@ pub fn thread_loop(recv: mpmc::Receiver<WorkItem>, send: mpsc::SyncSender<WorkCo
.collect(); .collect();
let csg = Arc::new(RwLock::new(CSG { let csg = Arc::new(RwLock::new(CSG {
name: "example".to_string(), name: format!("example {}", rand::random::<u8>()),
_seed: seed, _seed: seed,
parts, parts,
position: Default::default(), position: Default::default(),