Skip to content

Commit

Permalink
Prerenderer improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
markusmoenig committed Jun 5, 2024
1 parent 83a272a commit 31660a6
Show file tree
Hide file tree
Showing 12 changed files with 338 additions and 63 deletions.
18 changes: 18 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion creator/src/editor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -468,7 +468,7 @@ impl TheTrait for Editor {

// Get prerendered results
while let Some(PreRenderResult::RenderedRegion(id, prerendered)) =
PRERENDERTHREAD.lock().unwrap().receive()
PRERENDERTHREAD.try_lock().unwrap().receive()
{
if let Some(region) = self.project.get_region_mut(&id) {
region.prerendered = prerendered.clone();
Expand Down
83 changes: 59 additions & 24 deletions creator/src/modelfxeditor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -267,29 +267,33 @@ impl ModelFXEditor {
if id.name == "GeoFX RGBA Layout" {
self.set_geo_tiles(ui, ctx);
} else if id.name == "MaterialFX RGBA Layout" {
self.set_material_tiles(ui, ctx, project);
self.set_material_tiles(ui, ctx, project, None);
}
}
TheEvent::StateChanged(id, state) => {
if id.name == "MaterialFX Add" {
let mut material = MaterialFXObject::default();
let node = MaterialFXNode::new(MaterialFXNodeRole::Material);
material.nodes.push(node);
material.selected_node = Some(material.nodes.len() - 1);

PRERENDERTHREAD
.lock()
.unwrap()
.material_changed(material.clone());
if let Some(region) = project.get_region(&server_ctx.curr_region) {
let area = region.get_material_area(material.id);
PRERENDERTHREAD.lock().unwrap().render_region(
region.clone(),
project.palette.clone(),
area,
);
}
// if let Some(region) = project.get_region(&server_ctx.curr_region) {
// let area = region.get_material_area(material.id);
// PRERENDERTHREAD.lock().unwrap().render_region(
// region.clone(),
// project.palette.clone(),
// area,
// );
// }
let material_id = material.id;
project.materials.insert(material.id, material);
self.set_material_tiles(ui, ctx, project);
server_ctx.curr_material_object = Some(material_id);
self.set_material_tiles(ui, ctx, project, Some(material_id));
self.set_material_node_ui(server_ctx, project, ui, ctx);
} else if id.name == "ModelFX Clear" && state == &TheWidgetState::Clicked {
self.modelfx = ModelFX::default();
self.modelfx.draw(ui, ctx, &project.palette);
Expand All @@ -314,11 +318,13 @@ impl ModelFXEditor {
{
if let Some(material_id) = server_ctx.curr_material_object {
if let Some(material) = project.materials.get_mut(&material_id) {
let material_id = material.id;
let node = MaterialFXNode::new(MaterialFXNodeRole::Material);
material.nodes.push(node);
material.selected_node = Some(material.nodes.len() - 1);
let node_canvas = material.to_canvas(&project.palette);
ui.set_node_canvas("MaterialFX NodeCanvas", node_canvas);
self.set_material_tiles(ui, ctx, project);
self.set_material_tiles(ui, ctx, project, Some(material_id));
}
}
/*
Expand Down Expand Up @@ -387,7 +393,7 @@ impl ModelFXEditor {
}
}
TheEvent::TileEditorUp(id) => {
let prev = self.modelfx.to_json();
//let prev = self.modelfx.to_json();
if id.name == "GeoFX RGBA Layout View" && self.modelfx.released(ui, ctx) {
//self.modelfx.draw(ui, ctx, &project.palette);
self.render_preview(ui, &project.palette);
Expand Down Expand Up @@ -729,6 +735,23 @@ impl ModelFXEditor {
redraw
}

/// Modeler got activated, set the UI
pub fn activated(
&mut self,
server_ctx: &mut ServerContext,
project: &mut Project,
ui: &mut TheUI,
ctx: &mut TheContext,
) {
if self.editing_mode == EditingMode::Geometry {
self.set_geo_node_ui(server_ctx, project, ui, ctx);
} else if self.editing_mode == EditingMode::Material {
self.set_material_node_ui(server_ctx, project, ui, ctx);
} else {
self.set_selected_node_ui(server_ctx, project, ui, ctx);
}
}

pub fn set_geo_node_ui(
&mut self,
server_ctx: &mut ServerContext,
Expand Down Expand Up @@ -761,7 +784,7 @@ impl ModelFXEditor {
slider.set_value(TheValue::Float(*value));
//slider.set_default_value(TheValue::Float(0.0));
slider.set_range(TheValue::RangeF32(range.clone()));
slider.set_continuous(true);
//slider.set_continuous(true);
text_layout.add_pair(name.clone(), Box::new(slider));
} else if let TheValue::Float(value) = value {
let mut slider = TheTextLineEdit::new(TheId::named(
Expand All @@ -775,7 +798,7 @@ impl ModelFXEditor {
));
slider.set_value(TheValue::Int(*value));
slider.set_range(TheValue::RangeI32(range.clone()));
slider.set_continuous(true);
//slider.set_continuous(true);
text_layout.add_pair(name.clone(), Box::new(slider));
} else if let TheValue::TextList(index, list) = value {
let mut dropdown = TheDropdownMenu::new(TheId::named(
Expand Down Expand Up @@ -960,7 +983,7 @@ impl ModelFXEditor {
*/

/// Update the node canvas
fn update_node_canvas(&mut self, palette: &ThePalette, ui: &mut TheUI) {
fn _update_node_canvas(&mut self, palette: &ThePalette, ui: &mut TheUI) {
ui.set_node_canvas("ModelFX NodeCanvas", self.modelfx.to_canvas(palette));
}

Expand Down Expand Up @@ -1003,10 +1026,10 @@ impl ModelFXEditor {
pub fn set_geo_tiles(&mut self, ui: &mut TheUI, _ctx: &mut TheContext) {
let tile_size = 48;

let mut set_default_selection = false;
//let mut set_default_selection = false;

let geo_tiles = if self.geos.is_empty() {
set_default_selection = true;
//set_default_selection = true;
GeoFXNode::nodes()
} else {
self.geos.values().cloned().collect()
Expand Down Expand Up @@ -1061,11 +1084,11 @@ impl ModelFXEditor {
}

rgba_view.set_buffer(buffer);
if set_default_selection {
let mut hashset = FxHashSet::default();
hashset.insert((0, 0));
rgba_view.set_selection(hashset);
}
// if set_default_selection {
// let mut hashset = FxHashSet::default();
// hashset.insert((0, 0));
// rgba_view.set_selection(hashset);
// }
}
}
}
Expand All @@ -1075,6 +1098,7 @@ impl ModelFXEditor {
if let Some(editor) = ui.get_rgba_layout("GeoFX RGBA Layout") {
if let Some(rgba_view) = editor.rgba_view_mut().as_rgba_view() {
let selection = rgba_view.selection();

for i in selection {
if let Some(tile) = self.geos.get(&i) {
return Some(tile.clone());
Expand All @@ -1087,7 +1111,13 @@ impl ModelFXEditor {
}

/// Set the tiles for the picker.
pub fn set_material_tiles(&mut self, ui: &mut TheUI, _ctx: &mut TheContext, project: &Project) {
pub fn set_material_tiles(
&mut self,
ui: &mut TheUI,
_ctx: &mut TheContext,
project: &Project,
set_selection: Option<Uuid>,
) {
let tile_size = 48;

self.materials.clear();
Expand All @@ -1113,10 +1143,15 @@ impl ModelFXEditor {

let tile_buffer = TheRGBABuffer::new(TheDim::sized(tile_size, tile_size));

for (i, (id, _obj)) in project.materials.iter().enumerate() {
for (i, (id, obj)) in project.materials.iter().enumerate() {
let x = i as i32 % tiles_per_row;
let y = i as i32 / tiles_per_row;

if Some(obj.id) == set_selection {
let mut hashset = FxHashSet::default();
hashset.insert((x, y));
rgba_view.set_selection(hashset);
}
/*
self.tile_ids.insert((x, y), tile.id);
self.tile_text.insert(
Expand Down
4 changes: 4 additions & 0 deletions creator/src/panels.rs
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,10 @@ impl Panels {
ctx.ui.relayout = true;
redraw = true;
}
MODELFXEDITOR
.lock()
.unwrap()
.activated(server_ctx, project, ui, ctx);
} else if id.name == "Set Region Render" {
ctx.ui
.send(TheEvent::SetStackIndex(TheId::named("Main Stack"), 5));
Expand Down
6 changes: 5 additions & 1 deletion creator/src/tileeditor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1070,6 +1070,10 @@ impl TileEditor {

server.update_region(region);

MODELFXEDITOR
.lock()
.unwrap()
.set_geo_node_ui(server_ctx, project, ui, ctx);
redraw = true;
}

Expand Down Expand Up @@ -1121,7 +1125,7 @@ impl TileEditor {
}

if let Some(region) = region_to_render {
PRERENDERTHREAD.lock().unwrap().render_region(
PRERENDERTHREAD.try_lock().unwrap().render_region(
region,
project.palette.clone(),
tiles_to_render,
Expand Down
1 change: 1 addition & 0 deletions shared/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@ indexmap = { version = "2", features = ["serde"], default-features = true }
noiselib = "0.2.3"
regex = "1"
rstar = { version = "0.12.0", features = ["serde"] }
num_cpus = "1.16.0"
2 changes: 1 addition & 1 deletion shared/src/geofxnode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ impl GeoFXNode {
{
if let Some(radius) = value.to_f32() {
let d = length(vec2f(p.x, p.z) - self.position()) - radius;
return op_extrusion_y(p, d, 0.8);
return op_extrusion_y(p, d, 0.4);
}
}
}
Expand Down
16 changes: 12 additions & 4 deletions shared/src/geofxobject.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,20 @@ impl GeoFXObject {

pub fn update_area(&mut self) {
self.area.clear();
let mut area = AABB2D::zero();
// let mut area = AABB2D::zero();
// for geo in &self.nodes {
// if let Some(aabb) = geo.aabb(&TheTime::default()) {
// area.grow(aabb);
// }
// }
//self.area = area.to_tiles();

for geo in &self.nodes {
if let Some(aabb) = geo.aabb(&TheTime::default()) {
area.grow(aabb);
let p = geo.position();
let pp = vec2i(p.x as i32, p.y as i32);
if !self.area.contains(&pp) {
self.area.push(pp);
}
}
self.area = area.to_tiles();
}
}
1 change: 1 addition & 0 deletions shared/src/materialfxobject.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ impl MaterialFXObject {
pub fn to_canvas(&mut self, _palette: &ThePalette) -> TheNodeCanvas {
let mut canvas = TheNodeCanvas {
node_width: 95,
selected_node: self.selected_node,
..Default::default()
};

Expand Down
Loading

0 comments on commit 31660a6

Please sign in to comment.