Blender  V3.3
Public Attributes | List of all members
blender::modifiers::geometry_nodes::NodeState Struct Reference

Public Attributes

std::mutex mutex
 
MutableSpan< InputStateinputs
 
MutableSpan< OutputStateoutputs
 
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
 

Detailed Description

Definition at line 202 of file MOD_nodes_evaluator.cc.

Member Data Documentation

◆ has_been_executed

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().

◆ inputs

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().

◆ missing_required_inputs

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().

◆ mutex

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().

◆ node_has_finished

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().

◆ non_lazy_inputs_handled

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().

◆ outputs

MutableSpan<OutputState> blender::modifiers::geometry_nodes::NodeState::outputs

◆ schedule_state

NodeScheduleState blender::modifiers::geometry_nodes::NodeState::schedule_state = NodeScheduleState::NotScheduled

The documentation for this struct was generated from the following file: