Blender
V3.3
|
Public Attributes | |
std::mutex | mutex |
MutableSpan< InputState > | inputs |
MutableSpan< OutputState > | outputs |
bool | non_lazy_inputs_handled = false |
bool | has_been_executed = false |
bool | node_has_finished = false |
int | missing_required_inputs = 0 |
NodeScheduleState | schedule_state = NodeScheduleState::NotScheduled |
Definition at line 202 of file MOD_nodes_evaluator.cc.
bool blender::modifiers::geometry_nodes::NodeState::has_been_executed = false |
Used to check that nodes that don't support laziness do not run more than once.
Definition at line 229 of file MOD_nodes_evaluator.cc.
Referenced by blender::modifiers::geometry_nodes::GeometryNodesEvaluator::execute_node().
MutableSpan<InputState> blender::modifiers::geometry_nodes::NodeState::inputs |
States of the individual input and output sockets. One can index into these arrays without locking. However, to access the data inside a lock is generally necessary.
These spans have to be indexed with the socket index. Unavailable sockets have a state as well. Maybe we can handle unavailable sockets differently in Blender in general, so I did not want to add complexity around it here.
Definition at line 217 of file MOD_nodes_evaluator.cc.
Referenced by blender::modifiers::geometry_nodes::GeometryNodesEvaluator::add_value_to_input_socket(), blender::modifiers::geometry_nodes::NodeParamsProvider::can_get_input(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::destruct_input_value_if_exists(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::destruct_node_state(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::execute_multi_function_node(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::extract_group_outputs(), blender::modifiers::geometry_nodes::NodeParamsProvider::extract_input(), blender::modifiers::geometry_nodes::NodeParamsProvider::extract_multi_input(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::finish_node_if_possible(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::foreach_non_lazy_input(), blender::modifiers::geometry_nodes::NodeParamsProvider::get_input(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::initialize_node_state(), blender::modifiers::geometry_nodes::NodeParamsProvider::lazy_require_input(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::prepare_node_inputs_for_execution(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::set_input_required(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::set_input_unused(), and blender::modifiers::geometry_nodes::GeometryNodesEvaluator::should_forward_to_socket().
int blender::modifiers::geometry_nodes::NodeState::missing_required_inputs = 0 |
Counts the number of values that still have to be forwarded to this node until it should run again. It counts values from a multi input socket separately. This is used as an optimization so that nodes are not scheduled unnecessarily in many cases.
Definition at line 243 of file MOD_nodes_evaluator.cc.
Referenced by blender::modifiers::geometry_nodes::GeometryNodesEvaluator::add_value_to_input_socket(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::assert_expected_outputs_have_been_computed(), and blender::modifiers::geometry_nodes::GeometryNodesEvaluator::set_input_required().
std::mutex blender::modifiers::geometry_nodes::NodeState::mutex |
Needs to be locked when any data in this state is accessed that is not explicitly marked as otherwise.
Definition at line 207 of file MOD_nodes_evaluator.cc.
Referenced by blender::modifiers::geometry_nodes::GeometryNodesEvaluator::should_forward_to_socket(), and blender::modifiers::geometry_nodes::GeometryNodesEvaluator::with_locked_node().
bool blender::modifiers::geometry_nodes::NodeState::node_has_finished = false |
Becomes true when the node will never be executed again and its inputs are destructed. Generally, a node has finished once all of its outputs with (potential) users have been computed.
Definition at line 236 of file MOD_nodes_evaluator.cc.
Referenced by blender::modifiers::geometry_nodes::GeometryNodesEvaluator::finish_node_if_possible(), and blender::modifiers::geometry_nodes::GeometryNodesEvaluator::node_task_preprocessing().
bool blender::modifiers::geometry_nodes::NodeState::non_lazy_inputs_handled = false |
Most nodes have inputs that are always required. Those have special handling to avoid an extra call to the node execution function.
Definition at line 224 of file MOD_nodes_evaluator.cc.
Referenced by blender::modifiers::geometry_nodes::GeometryNodesEvaluator::node_task_preprocessing().
MutableSpan<OutputState> blender::modifiers::geometry_nodes::NodeState::outputs |
Definition at line 218 of file MOD_nodes_evaluator.cc.
Referenced by blender::modifiers::geometry_nodes::GeometryNodesEvaluator::assert_expected_outputs_have_been_computed(), blender::modifiers::geometry_nodes::NodeParamsProvider::can_set_output(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::destruct_node_state(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::execute_multi_function_node__field(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::execute_multi_function_node__value(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::execute_unknown_node(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::finish_node_if_possible(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::initialize_node_state(), blender::modifiers::geometry_nodes::NodeParamsProvider::lazy_output_is_required(), blender::modifiers::geometry_nodes::NodeParamsProvider::output_is_required(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::prepare_node_outputs_for_execution(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::send_output_required_notification(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::send_output_unused_notification(), blender::modifiers::geometry_nodes::NodeParamsProvider::set_default_remaining_outputs(), and blender::modifiers::geometry_nodes::NodeParamsProvider::set_output().
NodeScheduleState blender::modifiers::geometry_nodes::NodeState::schedule_state = NodeScheduleState::NotScheduled |
A node is always in one specific schedule state. This helps to ensure that the same node does not run twice at the same time accidentally.
Definition at line 249 of file MOD_nodes_evaluator.cc.
Referenced by blender::modifiers::geometry_nodes::GeometryNodesEvaluator::assert_expected_outputs_have_been_computed(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::node_task_postprocessing(), blender::modifiers::geometry_nodes::GeometryNodesEvaluator::node_task_preprocessing(), and blender::modifiers::geometry_nodes::GeometryNodesEvaluator::schedule_node().