Files
workinf_Blender_Wasm/blender-5.2.0/source/blender/modifiers/MOD_nodes.hh
2026-08-12 04:47:48 -04:00

74 lines
2.2 KiB
C++

/* SPDX-FileCopyrightText: 2023 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#include <memory>
#include "BLI_array.hh"
#include "NOD_socket_usage_inference_fwd.hh"
namespace blender {
struct NodesModifierData;
struct NodesModifierDataBlock;
struct Object;
struct NodesModifierPackedBake;
struct NodesModifierBake;
namespace bke::bake {
struct ModifierCache;
}
namespace nodes::eval_log {
class NodesEvalLog;
}
/**
* Rebuild the list of properties based on the sockets exposed as the modifier's node group
* inputs. If any properties correspond to the old properties by name and type, carry over
* the values.
*/
void MOD_nodes_update_interface(Object *object, NodesModifierData *nmd);
class NodesModifierUsageInferenceCache {
private:
uint64_t input_values_hash_ = 0;
public:
Array<nodes::socket_usage_inference::SocketUsage> inputs;
Array<nodes::socket_usage_inference::SocketUsage> outputs;
void ensure(const Object &object, const NodesModifierData &nmd);
void reset();
};
struct NodesModifierRuntime {
/**
* Contains logged information from the last evaluation.
* This can be used to help the user to debug a node tree.
* This is a shared pointer because we might want to keep it around in some cases after the
* evaluation (e.g. for gizmo backpropagation).
*/
std::shared_ptr<nodes::eval_log::NodesEvalLog> eval_log;
/**
* Simulation cache that is shared between original and evaluated modifiers. This allows the
* original modifier to be removed, without also removing the simulation state which may still be
* used by the evaluated modifier.
*/
std::shared_ptr<bke::bake::ModifierCache> cache;
/**
* Cache the usage of the node group inputs and outputs to accelerate drawing the UI when no
* properties change.
*/
NodesModifierUsageInferenceCache usage_cache;
};
void nodes_modifier_data_block_destruct(NodesModifierDataBlock *data_block, bool do_id_user);
void nodes_modifier_packed_bake_copy(NodesModifierBake &bake_dst,
const NodesModifierBake &bake_src);
void nodes_modifier_packed_bake_free(NodesModifierPackedBake *packed_bake);
void nodes_modifier_bake_destruct(NodesModifierBake *bake, bool do_id_user);
} // namespace blender