|
Blender V4.3
|
#include <FN_lazy_function.hh>
Inherited by blender::fn::lazy_function::GraphExecutor, blender::fn::lazy_function::tests::AddLazyFunction, blender::fn::lazy_function::tests::PartialEvaluationTestFunction, blender::fn::lazy_function::tests::StoreValueFunction, blender::nodes::LazyFunctionForAnonymousAttributeSetExtract, blender::nodes::LazyFunctionForAnonymousAttributeSetJoin, blender::nodes::LazyFunctionForBakeInputsUsage, blender::nodes::LazyFunctionForForeachGeometryElementZone, blender::nodes::LazyFunctionForGeometryNode, blender::nodes::LazyFunctionForGizmoInputsUsage, blender::nodes::LazyFunctionForGizmoNode, blender::nodes::LazyFunctionForGroupNode, blender::nodes::LazyFunctionForImplicitInput, blender::nodes::LazyFunctionForIndexSwitchSocketUsage, blender::nodes::LazyFunctionForLogicalOr, blender::nodes::LazyFunctionForMultiFunctionConversion, blender::nodes::LazyFunctionForMultiFunctionNode, blender::nodes::LazyFunctionForMultiInput, blender::nodes::LazyFunctionForMutedNode, blender::nodes::LazyFunctionForReduceForeachGeometryElement, blender::nodes::LazyFunctionForRepeatZone, blender::nodes::LazyFunctionForRerouteNode, blender::nodes::LazyFunctionForSimulationInputsUsage, blender::nodes::LazyFunctionForSimulationZone, blender::nodes::LazyFunctionForSwitchSocketUsage, blender::nodes::LazyFunctionForUndefinedNode, blender::nodes::LazyFunctionForViewerInputUsage, blender::nodes::LazyFunctionForViewerNode, blender::nodes::node_geo_bake_cc::LazyFunctionForBakeNode, blender::nodes::node_geo_index_switch_cc::LazyFunctionForIndexSwitchNode, blender::nodes::node_geo_menu_switch_cc::LazyFunctionForMenuSwitchNode, blender::nodes::node_geo_menu_switch_cc::LazyFunctionForMenuSwitchSocketUsage, blender::nodes::node_geo_simulation_cc::sim_input_node::LazyFunctionForSimulationInputNode, blender::nodes::node_geo_simulation_cc::sim_output_node::LazyFunctionForSimulationOutputNode, blender::nodes::node_geo_switch_cc::LazyFunctionForSwitchNode, and blender::nodes::node_geo_warning_cc::LazyFunctionForWarningNode.
Public Member Functions | |
| virtual | ~LazyFunction ()=default |
| virtual std::string | name () const |
| virtual std::string | input_name (int index) const |
| virtual std::string | output_name (int index) const |
| virtual void * | init_storage (LinearAllocator<> &allocator) const |
| virtual void | destruct_storage (void *storage) const |
| virtual void | possible_output_dependencies (int output_index, FunctionRef< void(Span< int >)> fn) const |
| bool | always_used_inputs_available (const Params ¶ms) const |
| bool | allow_missing_requested_inputs () const |
#LazyFunction Inline Methods | |
| Span< Input > | inputs () const |
| Span< Output > | outputs () const |
| void | execute (Params ¶ms, const Context &context) const |
Protected Attributes | |
| const char * | debug_name_ = "unknown" |
| Vector< Input > | inputs_ |
| Vector< Output > | outputs_ |
| bool | allow_missing_requested_inputs_ = false |
A function that can compute outputs and request inputs lazily. For more details see the comment at the top of the file.
Definition at line 272 of file FN_lazy_function.hh.
|
virtualdefault |
|
inline |
If true, the function can be executed even when some requested inputs are not available yet. This allows the function to make some progress and maybe to compute some outputs that are passed into this function again (lazy-function graphs may contain cycles as long as there aren't actually data dependencies).
Definition at line 339 of file FN_lazy_function.hh.
References allow_missing_requested_inputs_.
| bool blender::fn::lazy_function::LazyFunction::always_used_inputs_available | ( | const Params & | params | ) | const |
Utility to check that the guarantee by Input::usage is followed.
Definition at line 52 of file lazy_function.cc.
References allow_missing_requested_inputs_, inputs_, params, blender::fn::lazy_function::Input::usage, and blender::fn::lazy_function::Used.
Referenced by execute().
|
virtual |
Destruct the storage created in init_storage.
Reimplemented in blender::fn::lazy_function::GraphExecutor, blender::nodes::LazyFunctionForForeachGeometryElementZone, blender::nodes::LazyFunctionForGroupNode, blender::nodes::LazyFunctionForRepeatZone, and blender::nodes::LazyFunctionForSimulationZone.
Definition at line 35 of file lazy_function.cc.
References BLI_assert, and UNUSED_VARS_NDEBUG.
Referenced by blender::nodes::LazyFunctionForGroupNode::destruct_storage(), blender::nodes::LazyFunctionForSimulationZone::destruct_storage(), blender::nodes::execute_geometry_nodes_on_geometry(), and blender::fn::lazy_function::detail::execute_lazy_function_eagerly_impl().
|
inline |
During execution the function retrieves inputs and sets outputs in params. For some functions, this method is called more than once. After execution, the function either has computed all required outputs or is waiting for more inputs.
Definition at line 366 of file FN_lazy_function.hh.
References always_used_inputs_available(), BLI_assert, and params.
Referenced by blender::nodes::execute_geometry_nodes_on_geometry(), blender::nodes::LazyFunctionForGroupNode::execute_impl(), blender::nodes::LazyFunctionForSimulationZone::execute_impl(), blender::fn::lazy_function::detail::execute_lazy_function_eagerly_impl(), blender::nodes::ForeachGeometryElementNodeExecuteWrapper::execute_node(), and blender::nodes::RepeatBodyNodeExecuteWrapper::execute_node().
|
virtual |
Allocates storage for this function. The storage will be passed to every call to execute. If the function does not keep track of any state, this does not have to be implemented.
Reimplemented in blender::fn::lazy_function::GraphExecutor, blender::nodes::LazyFunctionForForeachGeometryElementZone, blender::nodes::LazyFunctionForGroupNode, blender::nodes::LazyFunctionForRepeatZone, and blender::nodes::LazyFunctionForSimulationZone.
Definition at line 30 of file lazy_function.cc.
Referenced by blender::nodes::execute_geometry_nodes_on_geometry(), blender::fn::lazy_function::detail::execute_lazy_function_eagerly_impl(), blender::nodes::LazyFunctionForGroupNode::init_storage(), and blender::nodes::LazyFunctionForSimulationZone::init_storage().
|
virtual |
Reimplemented in blender::fn::lazy_function::GraphExecutor, blender::nodes::LazyFunctionForForeachGeometryElementZone, blender::nodes::LazyFunctionForGeometryNode, blender::nodes::LazyFunctionForGroupNode, blender::nodes::LazyFunctionForRepeatZone, and blender::nodes::LazyFunctionForSimulationZone.
Definition at line 20 of file lazy_function.cc.
References inputs_.
Referenced by blender::nodes::LazyFunctionForGroupNode::input_name(), blender::nodes::LazyFunctionForSimulationZone::input_name(), and blender::fn::lazy_function::Socket::name().
Inputs of the function.
Definition at line 356 of file FN_lazy_function.hh.
References inputs_.
Referenced by blender::fn::lazy_function::Graph::add_function(), blender::nodes::execute_geometry_nodes_on_geometry(), blender::fn::lazy_function::execute_lazy_function_eagerly(), blender::nodes::LazyFunctionForGroupNode::LazyFunctionForGroupNode(), blender::nodes::LazyFunctionForSimulationZone::LazyFunctionForSimulationZone(), blender::fn::lazy_function::Params::set_input_unused(), blender::fn::lazy_function::Params::try_get_input_data_ptr(), and blender::fn::lazy_function::Params::try_get_input_data_ptr_or_request().
|
virtual |
Get a name of the function or an input or output. This is mainly used for debugging. These are virtual functions because the names are often not used outside of debugging workflows. This way the names are only generated when they are actually needed.
Reimplemented in blender::nodes::LazyFunctionForGroupNode.
Definition at line 15 of file lazy_function.cc.
References debug_name_.
Referenced by blender::fn::lazy_function::Node::name().
|
virtual |
Reimplemented in blender::fn::lazy_function::GraphExecutor, blender::nodes::LazyFunctionForForeachGeometryElementZone, blender::nodes::LazyFunctionForGeometryNode, blender::nodes::LazyFunctionForGroupNode, blender::nodes::LazyFunctionForRepeatZone, and blender::nodes::LazyFunctionForSimulationZone.
Definition at line 25 of file lazy_function.cc.
References outputs_.
Referenced by blender::fn::lazy_function::Socket::name(), blender::nodes::LazyFunctionForGroupNode::output_name(), and blender::nodes::LazyFunctionForSimulationZone::output_name().
Outputs of the function.
Definition at line 361 of file FN_lazy_function.hh.
References outputs_.
Referenced by blender::fn::lazy_function::Graph::add_function(), blender::nodes::execute_geometry_nodes_on_geometry(), blender::fn::lazy_function::execute_lazy_function_eagerly(), blender::fn::lazy_function::Params::get_output_data_ptr(), blender::fn::lazy_function::Params::get_output_usage(), blender::nodes::LazyFunctionForGroupNode::LazyFunctionForGroupNode(), blender::nodes::LazyFunctionForSimulationZone::LazyFunctionForSimulationZone(), blender::fn::lazy_function::Params::output_set(), blender::nodes::node_geo_simulation_cc::sim_input_node::LazyFunctionForSimulationInputNode::output_simulation_state_copy(), blender::nodes::node_geo_simulation_cc::sim_input_node::LazyFunctionForSimulationInputNode::output_simulation_state_move(), and blender::fn::lazy_function::Params::output_was_set().
|
virtual |
Calls fn with the input indices that the given output_index may depend on. By default every output depends on every input.
Reimplemented in blender::fn::lazy_function::tests::PartialEvaluationTestFunction.
Definition at line 41 of file lazy_function.cc.
|
protected |
Allow executing the function even if previously requested values are not yet available.
Definition at line 280 of file FN_lazy_function.hh.
Referenced by allow_missing_requested_inputs(), always_used_inputs_available(), blender::fn::lazy_function::GraphExecutor::GraphExecutor(), and blender::fn::lazy_function::tests::PartialEvaluationTestFunction::PartialEvaluationTestFunction().
|
protected |
Definition at line 274 of file FN_lazy_function.hh.
Referenced by blender::fn::lazy_function::tests::AddLazyFunction::AddLazyFunction(), blender::fn::lazy_function::GraphExecutor::GraphExecutor(), blender::nodes::node_geo_bake_cc::LazyFunctionForBakeNode::LazyFunctionForBakeNode(), blender::nodes::LazyFunctionForGeometryNode::LazyFunctionForGeometryNode(), blender::nodes::LazyFunctionForGizmoNode::LazyFunctionForGizmoNode(), blender::nodes::LazyFunctionForImplicitInput::LazyFunctionForImplicitInput(), blender::nodes::node_geo_index_switch_cc::LazyFunctionForIndexSwitchNode::LazyFunctionForIndexSwitchNode(), blender::nodes::node_geo_menu_switch_cc::LazyFunctionForMenuSwitchNode::LazyFunctionForMenuSwitchNode(), blender::nodes::node_geo_menu_switch_cc::LazyFunctionForMenuSwitchSocketUsage::LazyFunctionForMenuSwitchSocketUsage(), blender::nodes::LazyFunctionForMultiFunctionConversion::LazyFunctionForMultiFunctionConversion(), blender::nodes::LazyFunctionForMultiFunctionNode::LazyFunctionForMultiFunctionNode(), blender::nodes::LazyFunctionForMultiInput::LazyFunctionForMultiInput(), blender::nodes::LazyFunctionForMutedNode::LazyFunctionForMutedNode(), blender::nodes::LazyFunctionForReduceForeachGeometryElement::LazyFunctionForReduceForeachGeometryElement(), blender::nodes::LazyFunctionForRerouteNode::LazyFunctionForRerouteNode(), blender::nodes::node_geo_simulation_cc::sim_input_node::LazyFunctionForSimulationInputNode::LazyFunctionForSimulationInputNode(), blender::nodes::node_geo_simulation_cc::sim_output_node::LazyFunctionForSimulationOutputNode::LazyFunctionForSimulationOutputNode(), blender::nodes::node_geo_switch_cc::LazyFunctionForSwitchNode::LazyFunctionForSwitchNode(), blender::nodes::LazyFunctionForUndefinedNode::LazyFunctionForUndefinedNode(), blender::nodes::LazyFunctionForViewerInputUsage::LazyFunctionForViewerInputUsage(), blender::nodes::LazyFunctionForViewerNode::LazyFunctionForViewerNode(), name(), blender::fn::lazy_function::tests::PartialEvaluationTestFunction::PartialEvaluationTestFunction(), and blender::fn::lazy_function::tests::StoreValueFunction::StoreValueFunction().
Definition at line 275 of file FN_lazy_function.hh.
Referenced by blender::fn::lazy_function::Graph::add_function(), blender::fn::lazy_function::tests::AddLazyFunction::AddLazyFunction(), always_used_inputs_available(), blender::nodes::LazyFunctionForGeometryNode::execute_impl(), blender::nodes::LazyFunctionForGizmoNode::execute_impl(), blender::nodes::LazyFunctionForMultiFunctionNode::execute_impl(), blender::nodes::LazyFunctionForMultiInput::execute_impl(), blender::nodes::LazyFunctionForMutedNode::execute_impl(), blender::nodes::LazyFunctionForRerouteNode::execute_impl(), blender::fn::lazy_function::GraphExecutor::GraphExecutor(), input_name(), blender::nodes::LazyFunctionForGeometryNode::input_name(), inputs(), blender::nodes::node_geo_bake_cc::LazyFunctionForBakeNode::LazyFunctionForBakeNode(), blender::nodes::LazyFunctionForGeometryNode::LazyFunctionForGeometryNode(), blender::nodes::LazyFunctionForGizmoNode::LazyFunctionForGizmoNode(), blender::nodes::node_geo_index_switch_cc::LazyFunctionForIndexSwitchNode::LazyFunctionForIndexSwitchNode(), blender::nodes::node_geo_menu_switch_cc::LazyFunctionForMenuSwitchNode::LazyFunctionForMenuSwitchNode(), blender::nodes::node_geo_menu_switch_cc::LazyFunctionForMenuSwitchSocketUsage::LazyFunctionForMenuSwitchSocketUsage(), blender::nodes::LazyFunctionForMultiFunctionConversion::LazyFunctionForMultiFunctionConversion(), blender::nodes::LazyFunctionForMultiFunctionNode::LazyFunctionForMultiFunctionNode(), blender::nodes::LazyFunctionForMultiInput::LazyFunctionForMultiInput(), blender::nodes::LazyFunctionForMutedNode::LazyFunctionForMutedNode(), blender::nodes::LazyFunctionForReduceForeachGeometryElement::LazyFunctionForReduceForeachGeometryElement(), blender::nodes::LazyFunctionForRerouteNode::LazyFunctionForRerouteNode(), blender::nodes::node_geo_simulation_cc::sim_input_node::LazyFunctionForSimulationInputNode::LazyFunctionForSimulationInputNode(), blender::nodes::node_geo_simulation_cc::sim_output_node::LazyFunctionForSimulationOutputNode::LazyFunctionForSimulationOutputNode(), blender::nodes::node_geo_switch_cc::LazyFunctionForSwitchNode::LazyFunctionForSwitchNode(), blender::nodes::LazyFunctionForViewerNode::LazyFunctionForViewerNode(), blender::nodes::node_geo_warning_cc::LazyFunctionForWarningNode::LazyFunctionForWarningNode(), blender::fn::lazy_function::tests::PartialEvaluationTestFunction::PartialEvaluationTestFunction(), blender::nodes::node_geo_simulation_cc::sim_input_node::LazyFunctionForSimulationInputNode::pass_through(), possible_output_dependencies(), blender::fn::lazy_function::tests::StoreValueFunction::StoreValueFunction(), and blender::nodes::node_geo_index_switch_cc::LazyFunctionForIndexSwitchNode::values_num().
Definition at line 276 of file FN_lazy_function.hh.
Referenced by blender::fn::lazy_function::tests::AddLazyFunction::AddLazyFunction(), blender::nodes::LazyFunctionForMultiFunctionNode::execute_impl(), blender::nodes::node_geo_index_switch_cc::LazyFunctionForIndexSwitchNode::execute_single(), blender::nodes::node_geo_switch_cc::LazyFunctionForSwitchNode::execute_single(), blender::fn::lazy_function::GraphExecutor::GraphExecutor(), blender::nodes::node_geo_bake_cc::LazyFunctionForBakeNode::LazyFunctionForBakeNode(), blender::nodes::LazyFunctionForGeometryNode::LazyFunctionForGeometryNode(), blender::nodes::LazyFunctionForGizmoNode::LazyFunctionForGizmoNode(), blender::nodes::LazyFunctionForImplicitInput::LazyFunctionForImplicitInput(), blender::nodes::node_geo_index_switch_cc::LazyFunctionForIndexSwitchNode::LazyFunctionForIndexSwitchNode(), blender::nodes::node_geo_menu_switch_cc::LazyFunctionForMenuSwitchNode::LazyFunctionForMenuSwitchNode(), blender::nodes::node_geo_menu_switch_cc::LazyFunctionForMenuSwitchSocketUsage::LazyFunctionForMenuSwitchSocketUsage(), blender::nodes::LazyFunctionForMultiFunctionConversion::LazyFunctionForMultiFunctionConversion(), blender::nodes::LazyFunctionForMultiFunctionNode::LazyFunctionForMultiFunctionNode(), blender::nodes::LazyFunctionForMultiInput::LazyFunctionForMultiInput(), blender::nodes::LazyFunctionForMutedNode::LazyFunctionForMutedNode(), blender::nodes::LazyFunctionForReduceForeachGeometryElement::LazyFunctionForReduceForeachGeometryElement(), blender::nodes::LazyFunctionForRerouteNode::LazyFunctionForRerouteNode(), blender::nodes::node_geo_simulation_cc::sim_input_node::LazyFunctionForSimulationInputNode::LazyFunctionForSimulationInputNode(), blender::nodes::node_geo_simulation_cc::sim_output_node::LazyFunctionForSimulationOutputNode::LazyFunctionForSimulationOutputNode(), blender::nodes::node_geo_switch_cc::LazyFunctionForSwitchNode::LazyFunctionForSwitchNode(), blender::nodes::LazyFunctionForUndefinedNode::LazyFunctionForUndefinedNode(), blender::nodes::LazyFunctionForViewerInputUsage::LazyFunctionForViewerInputUsage(), blender::nodes::LazyFunctionForViewerNode::LazyFunctionForViewerNode(), blender::nodes::node_geo_warning_cc::LazyFunctionForWarningNode::LazyFunctionForWarningNode(), blender::nodes::node_geo_simulation_cc::sim_output_node::LazyFunctionForSimulationOutputNode::output_mixed_cached_state(), output_name(), blender::nodes::LazyFunctionForGeometryNode::output_name(), outputs(), and blender::fn::lazy_function::tests::PartialEvaluationTestFunction::PartialEvaluationTestFunction().