|
|
|
@@ -21,6 +21,7 @@ use graphene_std::extract_xy::XY;
|
|
|
|
|
use graphene_std::raster::{CellularDistanceFunction, CellularReturnType, Color, DomainWarpType, FractalType, NoiseType, RedGreenBlueAlpha};
|
|
|
|
|
use graphene_std::raster_types::{CPU, RasterDataTable};
|
|
|
|
|
use graphene_std::text::{Font, TypesettingConfig};
|
|
|
|
|
#[allow(unused_imports)]
|
|
|
|
|
use graphene_std::transform::Footprint;
|
|
|
|
|
use graphene_std::vector::VectorDataTable;
|
|
|
|
|
use graphene_std::*;
|
|
|
|
@@ -88,7 +89,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
category: "General",
|
|
|
|
|
node_template: NodeTemplate {
|
|
|
|
|
document_node: DocumentNode {
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::ops::IdentityNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ops::identity::IDENTIFIER),
|
|
|
|
|
inputs: vec![NodeInput::value(TaggedValue::None, true)],
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
@@ -107,7 +108,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
category: "Debug",
|
|
|
|
|
node_template: NodeTemplate {
|
|
|
|
|
document_node: DocumentNode {
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::memo::MonitorNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::monitor::IDENTIFIER),
|
|
|
|
|
inputs: vec![NodeInput::value(TaggedValue::None, true)],
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
skip_deduplication: true,
|
|
|
|
@@ -148,19 +149,19 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
nodes: [
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(generic!(T), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::MemoNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(0), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::transform_nodes::FreezeRealTimeNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::freeze_real_time::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(1), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::transform_nodes::BoundlessFootprintNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::boundless_footprint::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
@@ -230,21 +231,21 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
// Secondary (left) input type coercion
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(generic!(T), 1)],
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::graphic_element::ToElementNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(graphic_element::to_element::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
// Primary (bottom) input type coercion
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(generic!(T), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::graphic_element::ToGroupNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(graphic_element::to_group::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
// The monitor node is used to display a thumbnail in the UI
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(0), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::memo::MonitorNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::monitor::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
skip_deduplication: true,
|
|
|
|
|
..Default::default()
|
|
|
|
@@ -256,7 +257,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
NodeInput::node(NodeId(2), 0),
|
|
|
|
|
NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath),
|
|
|
|
|
],
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::graphic_element::LayerNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(graphic_element::layer::IDENTIFIER),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
@@ -337,7 +338,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
// Ensure this ID is kept in sync with the ID in set_alias so that the name input is kept in sync with the alias
|
|
|
|
|
DocumentNode {
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::graphic_element::ToArtboardNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(graphic_element::to_artboard::IDENTIFIER),
|
|
|
|
|
inputs: vec![
|
|
|
|
|
NodeInput::network(concrete!(TaggedValue), 1),
|
|
|
|
|
NodeInput::value(TaggedValue::String(String::from("Artboard")), false),
|
|
|
|
@@ -352,7 +353,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
// TODO: Check if thumbnail is reversed
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(0), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::memo::MonitorNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::monitor::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
skip_deduplication: true,
|
|
|
|
|
..Default::default()
|
|
|
|
@@ -364,7 +365,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
NodeInput::node(NodeId(1), 0),
|
|
|
|
|
NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath),
|
|
|
|
|
],
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::graphic_element::AppendArtboardNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(graphic_element::append_artboard::IDENTIFIER),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
@@ -466,13 +467,13 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::value(TaggedValue::None, false), NodeInput::scope("editor-api"), NodeInput::network(concrete!(String), 1)],
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_std::wasm_application_io::LoadResourceNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(wasm_application_io::load_resource::IDENTIFIER),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(0), 0)],
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_std::wasm_application_io::DecodeImageNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(wasm_application_io::decode_image::IDENTIFIER),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
@@ -522,6 +523,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
description: Cow::Borrowed("Loads an image from a given URL"),
|
|
|
|
|
properties: None,
|
|
|
|
|
},
|
|
|
|
|
#[cfg(feature = "gpu")]
|
|
|
|
|
DocumentNodeDefinition {
|
|
|
|
|
identifier: "Create Canvas",
|
|
|
|
|
category: "Debug: GPU",
|
|
|
|
@@ -532,14 +534,14 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
nodes: [
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::scope("editor-api")],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_std::wasm_application_io::CreateSurfaceNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(wasm_application_io::create_surface::IDENTIFIER),
|
|
|
|
|
skip_deduplication: true,
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(0), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::MemoNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
@@ -587,99 +589,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
description: Cow::Borrowed("Creates a new canvas object."),
|
|
|
|
|
properties: None,
|
|
|
|
|
},
|
|
|
|
|
DocumentNodeDefinition {
|
|
|
|
|
identifier: "Draw Canvas",
|
|
|
|
|
category: "Debug: GPU",
|
|
|
|
|
node_template: NodeTemplate {
|
|
|
|
|
document_node: DocumentNode {
|
|
|
|
|
implementation: DocumentNodeImplementation::Network(NodeNetwork {
|
|
|
|
|
exports: vec![NodeInput::node(NodeId(3), 0)],
|
|
|
|
|
nodes: [
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(concrete!(RasterDataTable<CPU>), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::ops::IntoNode<_, RasterDataTable<SRGBA8>>")),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::scope("editor-api")],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_std::wasm_application_io::CreateSurfaceNode")),
|
|
|
|
|
skip_deduplication: true,
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(1), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::MemoNode")),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(0), 0), NodeInput::node(NodeId(2), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_std::wasm_application_io::DrawImageFrameNode")),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
.into_iter()
|
|
|
|
|
.enumerate()
|
|
|
|
|
.map(|(id, node)| (NodeId(id as u64), node))
|
|
|
|
|
.collect(),
|
|
|
|
|
..Default::default()
|
|
|
|
|
}),
|
|
|
|
|
inputs: vec![NodeInput::value(TaggedValue::RasterData(RasterDataTable::default()), true)],
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
persistent_node_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
input_metadata: vec![("In", "TODO").into()],
|
|
|
|
|
output_names: vec!["Canvas".to_string()],
|
|
|
|
|
network_metadata: Some(NodeNetworkMetadata {
|
|
|
|
|
persistent_metadata: NodeNetworkPersistentMetadata {
|
|
|
|
|
node_metadata: [
|
|
|
|
|
DocumentNodeMetadata {
|
|
|
|
|
persistent_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
display_name: "Into".to_string(),
|
|
|
|
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNodeMetadata {
|
|
|
|
|
persistent_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
display_name: "Create Canvas".to_string(),
|
|
|
|
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 2)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNodeMetadata {
|
|
|
|
|
persistent_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
display_name: "Cache".to_string(),
|
|
|
|
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(7, 2)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNodeMetadata {
|
|
|
|
|
persistent_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
display_name: "Draw Canvas".to_string(),
|
|
|
|
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(14, 0)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
.into_iter()
|
|
|
|
|
.enumerate()
|
|
|
|
|
.map(|(id, node)| (NodeId(id as u64), node))
|
|
|
|
|
.collect(),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
}),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
description: Cow::Borrowed("Draws raster data to a canvas element."),
|
|
|
|
|
properties: None,
|
|
|
|
|
},
|
|
|
|
|
#[cfg(all(feature = "gpu", target_arch = "wasm32"))]
|
|
|
|
|
DocumentNodeDefinition {
|
|
|
|
|
identifier: "Rasterize",
|
|
|
|
|
category: "Raster",
|
|
|
|
@@ -690,20 +600,20 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
nodes: [
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::scope("editor-api")],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_std::wasm_application_io::CreateSurfaceNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(wasm_application_io::create_surface::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
skip_deduplication: true,
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(0), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::MemoNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(generic!(T), 0), NodeInput::network(concrete!(Footprint), 1), NodeInput::node(NodeId(1), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_std::wasm_application_io::RasterizeNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(wasm_application_io::rasterize::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
@@ -778,7 +688,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
node_template: NodeTemplate {
|
|
|
|
|
document_node: DocumentNode {
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_raster_nodes::std_nodes::NoisePatternNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::std_nodes::noise_pattern::IDENTIFIER),
|
|
|
|
|
inputs: vec![
|
|
|
|
|
NodeInput::value(TaggedValue::None, false),
|
|
|
|
|
NodeInput::value(TaggedValue::Bool(true), false),
|
|
|
|
@@ -843,7 +753,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
NodeInput::network(concrete!(RasterDataTable<CPU>), 0),
|
|
|
|
|
NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Red), false),
|
|
|
|
|
],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::raster::adjustments::ExtractChannelNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
@@ -852,7 +762,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
NodeInput::network(concrete!(RasterDataTable<CPU>), 0),
|
|
|
|
|
NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Green), false),
|
|
|
|
|
],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::raster::adjustments::ExtractChannelNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
@@ -861,7 +771,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
NodeInput::network(concrete!(RasterDataTable<CPU>), 0),
|
|
|
|
|
NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Blue), false),
|
|
|
|
|
],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::raster::adjustments::ExtractChannelNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
@@ -870,7 +780,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
NodeInput::network(concrete!(RasterDataTable<CPU>), 0),
|
|
|
|
|
NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Alpha), false),
|
|
|
|
|
],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::raster::adjustments::ExtractChannelNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
@@ -948,13 +858,13 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
nodes: [
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(concrete!(RasterDataTable<CPU>), 0), NodeInput::value(TaggedValue::XY(XY::X), false)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::extract_xy::ExtractXyNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(extract_xy::extract_xy::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(concrete!(RasterDataTable<CPU>), 0), NodeInput::value(TaggedValue::XY(XY::Y), false)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::extract_xy::ExtractXyNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(extract_xy::extract_xy::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
@@ -1024,7 +934,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
NodeInput::network(concrete!(BrushCache), 2),
|
|
|
|
|
],
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_brush::brush::BrushNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(brush::brush::brush::IDENTIFIER),
|
|
|
|
|
..Default::default()
|
|
|
|
|
}]
|
|
|
|
|
.into_iter()
|
|
|
|
@@ -1072,7 +982,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
category: "Debug",
|
|
|
|
|
node_template: NodeTemplate {
|
|
|
|
|
document_node: DocumentNode {
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::memo::MemoNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER),
|
|
|
|
|
inputs: vec![NodeInput::value(TaggedValue::RasterData(RasterDataTable::default()), true)],
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
..Default::default()
|
|
|
|
@@ -1091,7 +1001,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
category: "Debug",
|
|
|
|
|
node_template: NodeTemplate {
|
|
|
|
|
document_node: DocumentNode {
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::memo::ImpureMemoNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::impure_memo::IDENTIFIER),
|
|
|
|
|
inputs: vec![NodeInput::value(TaggedValue::RasterData(RasterDataTable::default()), true)],
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
..Default::default()
|
|
|
|
@@ -1105,164 +1015,6 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
description: Cow::Borrowed("TODO"),
|
|
|
|
|
properties: None,
|
|
|
|
|
},
|
|
|
|
|
DocumentNodeDefinition {
|
|
|
|
|
identifier: "Storage",
|
|
|
|
|
category: "Debug: GPU",
|
|
|
|
|
node_template: NodeTemplate {
|
|
|
|
|
document_node: DocumentNode {
|
|
|
|
|
implementation: DocumentNodeImplementation::Network(NodeNetwork {
|
|
|
|
|
exports: vec![NodeInput::node(NodeId(2), 0)],
|
|
|
|
|
nodes: [
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::scope("editor-api")],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::ops::IntoNode")),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(concrete!(Vec<u8>), 0), NodeInput::node(NodeId(0), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("wgpu_executor::StorageNode")),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(1), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::MemoNode")),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
.into_iter()
|
|
|
|
|
.enumerate()
|
|
|
|
|
.map(|(id, node)| (NodeId(id as u64), node))
|
|
|
|
|
.collect(),
|
|
|
|
|
..Default::default()
|
|
|
|
|
}),
|
|
|
|
|
inputs: vec![NodeInput::value(TaggedValue::None, true)],
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
persistent_node_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
input_metadata: vec![("In", "TODO").into()],
|
|
|
|
|
output_names: vec!["Storage".to_string()],
|
|
|
|
|
network_metadata: Some(NodeNetworkMetadata {
|
|
|
|
|
persistent_metadata: NodeNetworkPersistentMetadata {
|
|
|
|
|
node_metadata: [
|
|
|
|
|
DocumentNodeMetadata {
|
|
|
|
|
persistent_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
display_name: "Extract Executor".to_string(),
|
|
|
|
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNodeMetadata {
|
|
|
|
|
persistent_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
display_name: "Create Storage".to_string(),
|
|
|
|
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(7, 0)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNodeMetadata {
|
|
|
|
|
persistent_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
display_name: "Cache".to_string(),
|
|
|
|
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(14, 0)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
.into_iter()
|
|
|
|
|
.enumerate()
|
|
|
|
|
.map(|(id, node)| (NodeId(id as u64), node))
|
|
|
|
|
.collect(),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
}),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
description: Cow::Borrowed("TODO"),
|
|
|
|
|
properties: None,
|
|
|
|
|
},
|
|
|
|
|
DocumentNodeDefinition {
|
|
|
|
|
identifier: "Create Output Buffer",
|
|
|
|
|
category: "Debug: GPU",
|
|
|
|
|
node_template: NodeTemplate {
|
|
|
|
|
document_node: DocumentNode {
|
|
|
|
|
implementation: DocumentNodeImplementation::Network(NodeNetwork {
|
|
|
|
|
exports: vec![NodeInput::node(NodeId(2), 0)],
|
|
|
|
|
nodes: [
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::scope("editor-api")],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::ops::IntoNode")),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(concrete!(usize), 0), NodeInput::node(NodeId(0), 0), NodeInput::network(concrete!(Type), 1)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("wgpu_executor::CreateOutputBufferNode")),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(1), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::MemoNode")),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
.into_iter()
|
|
|
|
|
.enumerate()
|
|
|
|
|
.map(|(id, node)| (NodeId(id as u64), node))
|
|
|
|
|
.collect(),
|
|
|
|
|
..Default::default()
|
|
|
|
|
}),
|
|
|
|
|
inputs: vec![NodeInput::value(TaggedValue::None, true), NodeInput::value(TaggedValue::None, true)],
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
persistent_node_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
input_metadata: vec![("In", "TODO").into(), ("In", "TODO").into()],
|
|
|
|
|
output_names: vec!["Output Buffer".to_string()],
|
|
|
|
|
network_metadata: Some(NodeNetworkMetadata {
|
|
|
|
|
persistent_metadata: NodeNetworkPersistentMetadata {
|
|
|
|
|
node_metadata: [
|
|
|
|
|
DocumentNodeMetadata {
|
|
|
|
|
persistent_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
display_name: "Extract Executor".to_string(),
|
|
|
|
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNodeMetadata {
|
|
|
|
|
persistent_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
display_name: "Create Output Buffer".to_string(),
|
|
|
|
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(7, 0)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNodeMetadata {
|
|
|
|
|
persistent_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
display_name: "Cache".to_string(),
|
|
|
|
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(14, 0)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
.into_iter()
|
|
|
|
|
.enumerate()
|
|
|
|
|
.map(|(id, node)| (NodeId(id as u64), node))
|
|
|
|
|
.collect(),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
}),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
description: Cow::Borrowed("TODO"),
|
|
|
|
|
properties: None,
|
|
|
|
|
},
|
|
|
|
|
#[cfg(feature = "gpu")]
|
|
|
|
|
DocumentNodeDefinition {
|
|
|
|
|
identifier: "Create GPU Surface",
|
|
|
|
@@ -1275,13 +1027,13 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
DocumentNode {
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
inputs: vec![NodeInput::scope("editor-api")],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("wgpu_executor::CreateGpuSurfaceNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(wgpu_executor::create_gpu_surface::IDENTIFIER),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(0), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::ImpureMemoNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::impure_memo::IDENTIFIER),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
@@ -1329,87 +1081,6 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
description: Cow::Borrowed("TODO"),
|
|
|
|
|
properties: None,
|
|
|
|
|
},
|
|
|
|
|
#[cfg(feature = "gpu")]
|
|
|
|
|
DocumentNodeDefinition {
|
|
|
|
|
identifier: "Upload Texture",
|
|
|
|
|
category: "Debug: GPU",
|
|
|
|
|
node_template: NodeTemplate {
|
|
|
|
|
document_node: DocumentNode {
|
|
|
|
|
implementation: DocumentNodeImplementation::Network(NodeNetwork {
|
|
|
|
|
exports: vec![NodeInput::node(NodeId(2), 0)],
|
|
|
|
|
nodes: [
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::scope("editor-api")],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::ops::IntoNode<&WgpuExecutor>")),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(concrete!(RasterDataTable<CPU>), 0), NodeInput::node(NodeId(0), 0)],
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("wgpu_executor::UploadTextureNode")),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(1), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::ImpureMemoNode")),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
.into_iter()
|
|
|
|
|
.enumerate()
|
|
|
|
|
.map(|(id, node)| (NodeId(id as u64), node))
|
|
|
|
|
.collect(),
|
|
|
|
|
..Default::default()
|
|
|
|
|
}),
|
|
|
|
|
inputs: vec![NodeInput::value(TaggedValue::RasterData(RasterDataTable::default()), true)],
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
persistent_node_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
input_metadata: vec![("In", "TODO").into()],
|
|
|
|
|
output_names: vec!["Texture".to_string()],
|
|
|
|
|
network_metadata: Some(NodeNetworkMetadata {
|
|
|
|
|
persistent_metadata: NodeNetworkPersistentMetadata {
|
|
|
|
|
node_metadata: [
|
|
|
|
|
DocumentNodeMetadata {
|
|
|
|
|
persistent_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
display_name: "Extract Executor".to_string(),
|
|
|
|
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNodeMetadata {
|
|
|
|
|
persistent_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
display_name: "Upload Texture".to_string(),
|
|
|
|
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(7, 0)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNodeMetadata {
|
|
|
|
|
persistent_metadata: DocumentNodePersistentMetadata {
|
|
|
|
|
display_name: "Cache".to_string(),
|
|
|
|
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(14, 0)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
.into_iter()
|
|
|
|
|
.enumerate()
|
|
|
|
|
.map(|(id, node)| (NodeId(id as u64), node))
|
|
|
|
|
.collect(),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
..Default::default()
|
|
|
|
|
}),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
description: Cow::Borrowed("TODO"),
|
|
|
|
|
properties: None,
|
|
|
|
|
},
|
|
|
|
|
DocumentNodeDefinition {
|
|
|
|
|
identifier: "Extract",
|
|
|
|
|
category: "Debug",
|
|
|
|
@@ -1466,7 +1137,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
nodes: vec![
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(concrete!(VectorDataTable), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::memo::MonitorNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::monitor::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
skip_deduplication: true,
|
|
|
|
|
..Default::default()
|
|
|
|
@@ -1478,7 +1149,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath),
|
|
|
|
|
],
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::vector::vector_data::modification::PathModifyNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(vector::path_modify::IDENTIFIER),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
@@ -1536,7 +1207,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
category: "Text",
|
|
|
|
|
node_template: NodeTemplate {
|
|
|
|
|
document_node: DocumentNode {
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_std::text::TextNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(text::text::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
inputs: vec![
|
|
|
|
|
NodeInput::scope("editor-api"),
|
|
|
|
@@ -1644,7 +1315,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
nodes: [
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(concrete!(VectorDataTable), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::memo::MonitorNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::monitor::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
skip_deduplication: true,
|
|
|
|
|
..Default::default()
|
|
|
|
@@ -1659,7 +1330,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
NodeInput::network(concrete!(DVec2), 5),
|
|
|
|
|
],
|
|
|
|
|
manual_composition: Some(concrete!(Context)),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::transform_nodes::TransformNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::transform::IDENTIFIER),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
@@ -1743,25 +1414,25 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
nodes: vec![
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(concrete!(VectorDataTable), 0), NodeInput::network(concrete!(vector::style::Fill), 1)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_path_bool::BooleanOperationNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(path_bool::boolean_operation::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(0), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::MemoNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(1), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::transform_nodes::FreezeRealTimeNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::freeze_real_time::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(2), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::transform_nodes::BoundlessFootprintNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::boundless_footprint::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
@@ -1841,7 +1512,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
nodes: [
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::network(concrete!(graphene_std::vector::VectorDataTable), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::vector::SubpathSegmentLengthsNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(vector::subpath_segment_lengths::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
@@ -1856,25 +1527,25 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
NodeInput::network(concrete!(bool), 6),
|
|
|
|
|
NodeInput::node(NodeId(0), 0),
|
|
|
|
|
],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::vector::SamplePolylineNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(vector::sample_polyline::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(1), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::MemoNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(2), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::transform_nodes::FreezeRealTimeNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::freeze_real_time::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(3), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::transform_nodes::BoundlessFootprintNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::boundless_footprint::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
@@ -2012,24 +1683,24 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
|
|
|
|
NodeInput::network(concrete!(u32), 2),
|
|
|
|
|
],
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
implementation: DocumentNodeImplementation::proto("graphene_core::vector::PoissonDiskPointsNode"),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(vector::poisson_disk_points::IDENTIFIER),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(0), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::MemoNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(1), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::transform_nodes::FreezeRealTimeNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::freeze_real_time::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
DocumentNode {
|
|
|
|
|
inputs: vec![NodeInput::node(NodeId(2), 0)],
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::transform_nodes::BoundlessFootprintNode")),
|
|
|
|
|
implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::boundless_footprint::IDENTIFIER),
|
|
|
|
|
manual_composition: Some(generic!(T)),
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
@@ -2649,11 +2320,11 @@ pub fn resolve_document_node_type(identifier: &str) -> Option<&DocumentNodeDefin
|
|
|
|
|
|
|
|
|
|
pub fn collect_node_types() -> Vec<FrontendNodeType> {
|
|
|
|
|
// Create a mapping from registry ID to document node identifier
|
|
|
|
|
let id_to_identifier_map: HashMap<String, &'static str> = DOCUMENT_NODE_TYPES
|
|
|
|
|
let id_to_identifier_map: HashMap<ProtoNodeIdentifier, &'static str> = DOCUMENT_NODE_TYPES
|
|
|
|
|
.iter()
|
|
|
|
|
.filter_map(|definition| {
|
|
|
|
|
if let DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier { name }) = &definition.node_template.document_node.implementation {
|
|
|
|
|
Some((name.to_string(), definition.identifier))
|
|
|
|
|
if let DocumentNodeImplementation::ProtoNode(name) = &definition.node_template.document_node.implementation {
|
|
|
|
|
Some((name.clone(), definition.identifier))
|
|
|
|
|
} else {
|
|
|
|
|
None
|
|
|
|
|
}
|
|
|
|
@@ -2661,28 +2332,28 @@ pub fn collect_node_types() -> Vec<FrontendNodeType> {
|
|
|
|
|
.collect();
|
|
|
|
|
let mut extracted_node_types = Vec::new();
|
|
|
|
|
|
|
|
|
|
let node_registry = graphene_std::registry::NODE_REGISTRY.lock().unwrap();
|
|
|
|
|
let node_metadata = graphene_std::registry::NODE_METADATA.lock().unwrap();
|
|
|
|
|
let node_registry = registry::NODE_REGISTRY.lock().unwrap();
|
|
|
|
|
let node_metadata = registry::NODE_METADATA.lock().unwrap();
|
|
|
|
|
for (id, metadata) in node_metadata.iter() {
|
|
|
|
|
if let Some(implementations) = node_registry.get(id) {
|
|
|
|
|
let identifier = match id_to_identifier_map.get(id) {
|
|
|
|
|
Some(&id) => id.to_string(),
|
|
|
|
|
Some(&id) => id,
|
|
|
|
|
None => continue,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Extract category from metadata (already creates an owned String)
|
|
|
|
|
let category = metadata.category.unwrap_or_default().to_string();
|
|
|
|
|
let category = metadata.category.unwrap_or_default();
|
|
|
|
|
|
|
|
|
|
// Extract input types (already creates owned Strings)
|
|
|
|
|
let input_types = implementations
|
|
|
|
|
.iter()
|
|
|
|
|
.flat_map(|(_, node_io)| node_io.inputs.iter().map(|ty| ty.nested_type().to_string()))
|
|
|
|
|
.collect::<HashSet<String>>()
|
|
|
|
|
.flat_map(|(_, node_io)| node_io.inputs.iter().map(|ty| ty.nested_type().to_cow_string()))
|
|
|
|
|
.collect::<HashSet<Cow<'static, str>>>()
|
|
|
|
|
.into_iter()
|
|
|
|
|
.collect::<Vec<String>>();
|
|
|
|
|
.collect::<Vec<Cow<'static, str>>>();
|
|
|
|
|
|
|
|
|
|
// Create a FrontendNodeType
|
|
|
|
|
let node_type = FrontendNodeType::with_owned_strings_and_input_types(identifier, category, input_types);
|
|
|
|
|
let node_type = FrontendNodeType::with_input_types(identifier, category, input_types);
|
|
|
|
|
|
|
|
|
|
// Store the created node_type
|
|
|
|
|
extracted_node_types.push(node_type);
|
|
|
|
@@ -2698,8 +2369,8 @@ pub fn collect_node_types() -> Vec<FrontendNodeType> {
|
|
|
|
|
.document_node
|
|
|
|
|
.inputs
|
|
|
|
|
.iter()
|
|
|
|
|
.filter_map(|node_input| node_input.as_value().map(|node_value| node_value.ty().nested_type().to_string()))
|
|
|
|
|
.collect::<Vec<String>>();
|
|
|
|
|
.filter_map(|node_input| node_input.as_value().map(|node_value| node_value.ty().nested_type().to_cow_string()))
|
|
|
|
|
.collect::<Vec<Cow<'static, str>>>();
|
|
|
|
|
|
|
|
|
|
FrontendNodeType::with_input_types(definition.identifier, definition.category, input_types)
|
|
|
|
|
})
|
|
|
|
|