From 3015a9c8af49b66d539cf9fae63266ef6044a521 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Thu, 16 Feb 2023 15:03:13 +0100 Subject: [PATCH] Chain cache node and Clone to make them usable from the ui (#1032) Chain cache node and Clone to make it a drop in replacement --- .../document_node_types.rs | 42 +++++++++++++++---- node-graph/gcore/src/ops.rs | 2 +- .../interpreted-executor/src/node_registry.rs | 1 + 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler/document_node_types.rs b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler/document_node_types.rs index 56b4d720..b20382a8 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler/document_node_types.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler/document_node_types.rs @@ -332,6 +332,40 @@ fn static_nodes() -> Vec { }], properties: node_properties::blur_image_properties, }, + DocumentNodeType { + name: "Cache", + category: "Structural", + identifier: NodeImplementation::DocumentNode(NodeNetwork { + inputs: vec![0], + outputs: vec![NodeOutput::new(1, 0)], + nodes: vec![ + ( + 0, + DocumentNode { + name: "CacheNode".to_string(), + inputs: vec![NodeInput::Network(concrete!(Image))], + implementation: DocumentNodeImplementation::Unresolved(NodeIdentifier::new("graphene_std::memo::CacheNode")), + metadata: Default::default(), + }, + ), + ( + 1, + DocumentNode { + name: "CloneNode".to_string(), + inputs: vec![NodeInput::node(0, 0)], + implementation: DocumentNodeImplementation::Unresolved(NodeIdentifier::new("graphene_core::ops::CloneNode<_>")), + metadata: Default::default(), + }, + ), + ] + .into_iter() + .collect(), + ..Default::default() + }), + inputs: vec![DocumentInputType::value("Image", TaggedValue::Image(Image::empty()), true)], + outputs: vec![DocumentOutputType::new("Image", FrontendGraphDataType::Raster)], + properties: node_properties::no_properties, + }, #[cfg(feature = "gpu")] DocumentNodeType { name: "GpuImage", @@ -373,14 +407,6 @@ fn static_nodes() -> Vec { outputs: vec![DocumentOutputType::new("Image", FrontendGraphDataType::Raster)], properties: node_properties::quantize_properties, }, - DocumentNodeType { - name: "Cache", - category: "Structural", - identifier: NodeImplementation::proto("graphene_std::memo::CacheNode"), - inputs: vec![DocumentInputType::value("Image", TaggedValue::Image(Image::empty()), true)], - outputs: vec![DocumentOutputType::new("Image", FrontendGraphDataType::Raster)], - properties: node_properties::no_properties, - }, DocumentNodeType { name: "Invert RGB", category: "Image Adjustments", diff --git a/node-graph/gcore/src/ops.rs b/node-graph/gcore/src/ops.rs index 5c109117..4fab245c 100644 --- a/node-graph/gcore/src/ops.rs +++ b/node-graph/gcore/src/ops.rs @@ -84,7 +84,7 @@ pub mod dynamic { #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] pub struct CloneNode(PhantomData); -impl<'i, O: Clone + 'i> Node<'i, &'i O> for CloneNode { +impl<'i, 'n: 'i, O: Clone + 'i> Node<'i, &'n O> for CloneNode { type Output = O; fn eval<'s: 'i>(&'s self, input: &'i O) -> Self::Output { input.clone() diff --git a/node-graph/interpreted-executor/src/node_registry.rs b/node-graph/interpreted-executor/src/node_registry.rs index 6910f2df..16e297e5 100644 --- a/node-graph/interpreted-executor/src/node_registry.rs +++ b/node-graph/interpreted-executor/src/node_registry.rs @@ -95,6 +95,7 @@ fn node_registry() -> HashMap, input: &u32, params: [&u32]), register_node!(graphene_core::ops::AddNode, input: (u32, u32), params: []), register_node!(graphene_core::ops::AddNode, input: (u32, &u32), params: []), + register_node!(graphene_core::ops::CloneNode<_>, input: &Image, params: []), register_node!(graphene_core::ops::AddParameterNode<_>, input: u32, params: [u32]), register_node!(graphene_core::ops::AddParameterNode<_>, input: &u32, params: [u32]), register_node!(graphene_core::ops::AddParameterNode<_>, input: u32, params: [&u32]),