Blender V5.0
BKE_compute_context_cache.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2025 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
9
11#include "BLI_map.hh"
12#include "BLI_vector.hh"
13
14namespace blender::bke {
15
27 LinearAllocator<> allocator_;
30
32 modifier_contexts_cache_;
36 group_node_contexts_cache_;
38 simulation_zone_contexts_cache_;
40 repeat_zone_contexts_cache_;
43 foreach_geometry_element_zone_contexts_cache_;
45 evaluate_closure_contexts_cache_;
46
47 public:
49 const NodesModifierData &nmd);
50 const ModifierComputeContext &for_modifier(const ComputeContext *parent, int modifier_uid);
51
54
55 const ShaderComputeContext &for_shader(const ComputeContext *parent, const bNodeTree *tree);
56
58 int32_t node_id,
59 const bNodeTree *tree = nullptr);
60
62 int output_node_id);
64 const bNode &output_node);
65
67 int32_t output_node_id,
68 int iteration);
70 const bNode &output_node,
71 int iteration);
72
74 const ComputeContext *parent, int32_t output_node_id, int index);
76 const ComputeContext *parent, const bNode &output_node, int index);
77
79 const ComputeContext *parent,
80 int32_t node_id,
81 const bNodeTree *tree = nullptr,
82 const std::optional<nodes::ClosureSourceLocation> &closure_source_location = std::nullopt);
83
88 template<typename T, typename... Args> const T &for_any_uncached(Args &&...args)
89 {
90 destruct_ptr<T> compute_context = allocator_.construct<T>(std::forward<Args>(args)...);
91 const T &result = *compute_context;
92 cache_.append(std::move(compute_context));
93 return result;
94 }
95};
96
97} // namespace blender::bke
const EvaluateClosureComputeContext & for_evaluate_closure(const ComputeContext *parent, int32_t node_id, const bNodeTree *tree=nullptr, const std::optional< nodes::ClosureSourceLocation > &closure_source_location=std::nullopt)
const ModifierComputeContext & for_modifier(const ComputeContext *parent, const NodesModifierData &nmd)
const GroupNodeComputeContext & for_group_node(const ComputeContext *parent, int32_t node_id, const bNodeTree *tree=nullptr)
const ForeachGeometryElementZoneComputeContext & for_foreach_geometry_element_zone(const ComputeContext *parent, int32_t output_node_id, int index)
const RepeatZoneComputeContext & for_repeat_zone(const ComputeContext *parent, int32_t output_node_id, int iteration)
const ShaderComputeContext & for_shader(const ComputeContext *parent, const bNodeTree *tree)
const OperatorComputeContext & for_operator(const ComputeContext *parent)
const SimulationZoneComputeContext & for_simulation_zone(const ComputeContext *parent, int output_node_id)
KDTree_3d * tree
#define T
std::unique_ptr< T, DestructValueAtAddress< T > > destruct_ptr