mess with gui
This commit is contained in:
+23
-11
@@ -72,7 +72,7 @@ impl Default for GState {
|
||||
}
|
||||
|
||||
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.y, -100.0..=100.0).text("Position.y"));
|
||||
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.y, 0.0..=2.0).text("Scale.y"));
|
||||
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) {
|
||||
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.y, 0.0..=1.0).text("Colour.g"));
|
||||
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_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_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) {
|
||||
@@ -127,12 +131,13 @@ pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
|
||||
ui.heading(format!("Meshes ({})", meshes_len));
|
||||
let mut meshdel = vec![];
|
||||
for mesh in &mut state.meshes {
|
||||
ui.label(mesh.name.clone());
|
||||
ui.collapsing(mesh.name.clone(), |ui| {
|
||||
if meshes_len > 1 || csg_len > 0 {
|
||||
meshdel.push(ui.small_button("remove mesh").clicked());
|
||||
}
|
||||
draw_position(ui, &mut mesh.position);
|
||||
draw_material(ui, &mut mesh.material);
|
||||
});
|
||||
}
|
||||
for i in meshdel
|
||||
.into_iter()
|
||||
@@ -145,7 +150,7 @@ pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
|
||||
let mut csgdel = vec![];
|
||||
for csg in &mut state.csg {
|
||||
let mut csg = csg.write().unwrap();
|
||||
ui.label(csg.name.clone());
|
||||
ui.collapsing(csg.name.clone(), |ui| {
|
||||
if meshes_len > 0 || csg_len > 1 {
|
||||
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);
|
||||
ui.horizontal(|ui| {
|
||||
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;
|
||||
ui.selectable_value(
|
||||
&mut csg.subdivision,
|
||||
@@ -162,6 +169,7 @@ pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
for i in csgdel
|
||||
.into_iter()
|
||||
@@ -178,8 +186,8 @@ pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
|
||||
}
|
||||
ui.heading(format!("Lights ({})", state.lights.len()));
|
||||
let mut lightdel = vec![];
|
||||
for light in &mut state.lights {
|
||||
ui.label("Light");
|
||||
for (i, light) in state.lights.iter_mut().enumerate() {
|
||||
ui.collapsing(format!("Light {i}"), |ui| {
|
||||
lightdel.push(ui.small_button("remove light").clicked());
|
||||
ui.add(
|
||||
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"),
|
||||
);
|
||||
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(
|
||||
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(
|
||||
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
|
||||
.into_iter()
|
||||
|
||||
@@ -134,7 +134,16 @@ pub(crate) fn load_obj(
|
||||
// index Uses the hash map to check that we're not duplicating unnecessarily
|
||||
for g in &object.objects[0].groups {
|
||||
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);
|
||||
let mapping = ((v.0) as u32, (v.2.unwrap_or(0)) as u32);
|
||||
if let Some(&exist) = temp_hash_map.get(&mapping) {
|
||||
|
||||
@@ -7,7 +7,7 @@ use std::{
|
||||
};
|
||||
|
||||
use foldhash::{HashMap, HashMapExt};
|
||||
use glam::{EulerRot, Mat4, Vec3};
|
||||
use glam::Vec3;
|
||||
use log::info;
|
||||
use rand::{Rng, SeedableRng, rngs::SmallRng};
|
||||
use rspirv::{binary::Assemble, dr::Module};
|
||||
@@ -139,7 +139,7 @@ pub fn thread_loop(recv: mpmc::Receiver<WorkItem>, send: mpsc::SyncSender<WorkCo
|
||||
.collect();
|
||||
|
||||
let csg = Arc::new(RwLock::new(CSG {
|
||||
name: "example".to_string(),
|
||||
name: format!("example {}", rand::random::<u8>()),
|
||||
_seed: seed,
|
||||
parts,
|
||||
position: Default::default(),
|
||||
|
||||
Reference in New Issue
Block a user