Skip to content

Commit da22edb

Browse files
committed
Reduce rendered nodes
1 parent fcd379a commit da22edb

File tree

3 files changed

+36
-24
lines changed

3 files changed

+36
-24
lines changed

editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1321,21 +1321,7 @@ impl<'a> MessageHandler<NodeGraphMessage, NodeGraphMessageContext<'a>> for NodeG
13211321
responses.add(FrontendMessage::UpdateNodeGraphWires { wires });
13221322
}
13231323
NodeGraphMessage::UpdateVisibleNodes => {
1324-
let Some(network_metadata) = network_interface.network_metadata(breadcrumb_network_path) else {
1325-
return;
1326-
};
1327-
let document_bbox = ipp.document_bounds(network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport.inverse());
1328-
let mut nodes = Vec::new();
1329-
for node_id in &self.frontend_nodes {
1330-
let Some(node_bbox) = network_interface.node_bounding_box(node_id, breadcrumb_network_path) else {
1331-
log::error!("Could not get bbox for node: {:?}", node_id);
1332-
continue;
1333-
};
1334-
if node_bbox[1].x >= document_bbox[0].x && node_bbox[0].x <= document_bbox[1].x && node_bbox[1].y >= document_bbox[0].y && node_bbox[0].y <= document_bbox[1].y {
1335-
nodes.push(*node_id);
1336-
}
1337-
}
1338-
1324+
let nodes = self.visible_nodes(network_interface, breadcrumb_network_path, ipp);
13391325
responses.add(FrontendMessage::UpdateVisibleNodes { nodes });
13401326
}
13411327
NodeGraphMessage::SendGraph => {
@@ -2367,6 +2353,24 @@ impl NodeGraphMessageHandler {
23672353
nodes
23682354
}
23692355

2356+
pub fn visible_nodes(&self, network_interface: &mut NodeNetworkInterface, breadcrumb_network_path: &[NodeId], ipp: &InputPreprocessorMessageHandler) -> Vec<NodeId> {
2357+
let Some(network_metadata) = network_interface.network_metadata(breadcrumb_network_path) else {
2358+
return Vec::new();
2359+
};
2360+
let document_bbox = ipp.document_bounds(network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport.inverse());
2361+
let mut nodes = Vec::new();
2362+
for node_id in &self.frontend_nodes {
2363+
let Some(node_bbox) = network_interface.node_bounding_box(node_id, breadcrumb_network_path) else {
2364+
log::error!("Could not get bbox for node: {:?}", node_id);
2365+
continue;
2366+
};
2367+
if node_bbox[1].x >= document_bbox[0].x && node_bbox[0].x <= document_bbox[1].x && node_bbox[1].y >= document_bbox[0].y && node_bbox[0].y <= document_bbox[1].y {
2368+
nodes.push(*node_id);
2369+
}
2370+
}
2371+
nodes
2372+
}
2373+
23702374
fn collect_subgraph_names(network_interface: &mut NodeNetworkInterface, breadcrumb_network_path: &[NodeId]) -> Option<Vec<String>> {
23712375
let mut current_network_path = vec![];
23722376
let mut current_network = network_interface.nested_network(&current_network_path).unwrap();

editor/src/messages/portfolio/portfolio_message_handler.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -819,7 +819,7 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageContext<'_>> for Portfolio
819819
}
820820
PortfolioMessage::EvaluateActiveDocumentWithThumbnails => {
821821
responses.add(PortfolioMessage::EvaluateActiveDocument {
822-
nodes_to_introspect: self.nodes_to_try_render(ipp.viewport_bounds()[1], &preferences.graph_wire_style),
822+
nodes_to_introspect: self.visible_nodes_to_try_render(ipp, &preferences.graph_wire_style),
823823
});
824824
responses.add(Message::StartEvaluationQueue);
825825
responses.add(PortfolioMessage::ProcessThumbnails);
@@ -847,7 +847,7 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageContext<'_>> for Portfolio
847847
context.real_time = Some(ipp.time);
848848
context.downstream_transform = Some(DAffine2::IDENTITY);
849849

850-
let nodes_to_try_render = self.nodes_to_try_render(ipp.viewport_bounds()[1], &preferences.graph_wire_style);
850+
let nodes_to_try_render = self.visible_nodes_to_try_render(ipp, &preferences.graph_wire_style);
851851

852852
self.executor.submit_node_graph_evaluation(context, None, None, nodes_to_try_render);
853853
}
@@ -1242,7 +1242,7 @@ impl PortfolioMessageHandler {
12421242
result
12431243
}
12441244

1245-
pub fn nodes_to_try_render(&mut self, viewport_size: DVec2, graph_wire_style: &GraphWireStyle) -> HashSet<SNI> {
1245+
pub fn visible_nodes_to_try_render(&mut self, ipp: &InputPreprocessorMessageHandler, graph_wire_style: &GraphWireStyle) -> HashSet<SNI> {
12461246
let Some(document) = self.active_document_id.and_then(|document_id| self.documents.get_mut(&document_id)) else {
12471247
log::error!("Tried to render non-existent document: {:?}", self.active_document_id);
12481248
return HashSet::new();
@@ -1284,7 +1284,8 @@ impl PortfolioMessageHandler {
12841284
.viewport_loaded_thumbnail_position(&input_connector, graph_wire_style, &document.breadcrumb_network_path)
12851285
{
12861286
log::debug!("viewport position: {:?}, input: {:?}", viewport_position, input_connector);
1287-
let in_view = viewport_position.x < 0.0 || viewport_position.y < 0.0 || viewport_position.x > viewport_size.x || viewport_position.y > viewport_size.y;
1287+
1288+
let in_view = viewport_position.x > 0.0 && viewport_position.y > 0.0 && viewport_position.x < ipp.viewport_bounds()[1].x && viewport_position.y < ipp.viewport_bounds()[1].y;
12881289
if in_view {
12891290
let Some(protonode) = document.network_interface.protonode_from_input(&input_connector, &document.breadcrumb_network_path) else {
12901291
// The input is not connected to the export, which occurs if inside a disconnected node
@@ -1299,21 +1300,27 @@ impl PortfolioMessageHandler {
12991300
};
13001301

13011302
// Get thumbnails for all visible layer
1302-
for visible_node in &document.node_graph_handler.frontend_nodes {
1303+
for visible_node in &document.node_graph_handler.visible_nodes(&mut document.network_interface, &document.breadcrumb_network_path, ipp) {
13031304
if document.network_interface.is_layer(&visible_node, &document.breadcrumb_network_path) {
1304-
log::debug!("visible_node: {:?}", visible_node);
13051305
let Some(protonode) = document
13061306
.network_interface
1307-
.protonode_from_output(&OutputConnector::node(*visible_node, 1), &document.breadcrumb_network_path)
1307+
.protonode_from_output(&OutputConnector::node(*visible_node, 0), &document.breadcrumb_network_path)
13081308
else {
13091309
continue;
13101310
};
13111311
nodes_to_render.insert(protonode);
13121312
}
13131313
}
13141314

1315-
// Get all protonodes for all connected side layer inputs connected to the export in the document network
1315+
// Get all protonodes for all connected side layer inputs visible in the layer panel
13161316
for layer in document.network_interface.document_metadata().all_layers() {
1317+
if layer
1318+
.ancestors(document.network_interface.document_metadata())
1319+
.skip(1)
1320+
.any(|ancestor| document.collapsed.0.contains(&ancestor))
1321+
{
1322+
continue;
1323+
};
13171324
let connector = InputConnector::Node {
13181325
node_id: layer.to_node(),
13191326
input_index: 1,

node-graph/interpreted-executor/src/dynamic_executor.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,8 @@ impl BorrowTree {
419419
let nullify_when_calling = node_construction_args.context_dependencies.inverse();
420420

421421
let cached_protonode = if let Some(cache_constructor) = typing_context.cache_constructor(&types.return_value.nested_type()) {
422-
let cache = cache_constructor(protonode, MonitorMemoNodeState::Disabled);
422+
// Every cache stores its first evaluation, because if it acts as a pass through on the first evaluation, it can become cached and it wont be possible to know its value for its thumbnail
423+
let cache = cache_constructor(protonode, MonitorMemoNodeState::StoreFirstEvaluation);
423424
let cache_node_container = NodeContainer::new(cache);
424425
if node_construction_args.cache_output {
425426
cache_node_container.permanently_enable_cache();

0 commit comments

Comments
 (0)