Nodes
Each node is composed of multiple parts
ConfigurableNode trait
This trait is composed of two methods which make the configuration available to the user in the ui.
The settings method can return a list of `NodeSetting`s which describe a configuration option.
Each NodeSetting is composed of at least an id and a value. It’s recommended to use the setting! macro to define each setting as it automatically creates the NodeSetting struct and is also able to derive the value type out of the given field.
When no label is defined the id is also what will be shown to the user in the node settings pane.
Settings can be marked as optional and disabled if necessary.
The value also contains any options or parameter which might be necessary for the ui to allow proper configuration.
NodeSettingValue::Float
Will display a slider in the ui supporting arbitrary floating values.
The min and max options configure the supported value range while min_hint and max_hint configure the start and end point of the slider.
The step_size is used when scrolling on the slider.
NodeSettingValue::Uint
Will display a slider in the ui supporting 32bit unsigned integers.
The min and max options configure the supported value range while min_hint and max_hint configure the start and end point of the slider.
The step_size is used when scrolling on the slider.
NodeSettingValue::Int
Will display a slider in the ui supporting 64bit signed integers.
The min and max options configure the supported value range while min_hint and max_hint configure the start and end point of the slider.
The step_size is used when scrolling on the slider.
NodeSettingValue::Select
Displays a dropdown in the ui.
The variant option configures the available options. These can be nested as well.
NodeSettingValue::Enum
Displays a dropdown in the ui.
The Enum value can be auto-generated from any rust enum as long as it implements the enum_iterator::Sequence, Into<u8> and Display traits.
NodeSettingValue::Id
Displays a dropdown in the ui.
This differs to the Select value in only supporting u32 values and not supporting nesting.
PipelineNode trait
This trait describes the node interface of this node.
This includes
-
the name of the node type
-
the node type
-
the preview type
-
the category
-
an optional display name
-
the list of inputs and outputs
ProcessingNode trait
This trait describes the actual implementation of the node. For processing every node can create a state object which will always be kept running in the same instance and does not have to be thread safe.
A node can run code in all three processing stages (pre_process, process, post_process). Nodes will be executed based on the dependencies defined by the node links. Execution order is not deterministic as the node pipeline is composed of multiple small graphs which could be run in any order.
The ProcessingNode trait also allows you to define templates for different Configurations.
The debug_ui method can be implemented as well which allows to add node internals to the egui debug ui available on Linux.