MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ update_push_constants_from_nodes()

void MayaFlux::Buffers::NodeBindingsProcessor::update_push_constants_from_nodes ( )
private

Definition at line 46 of file NodeBindingsProcessor.cpp.

47{
48 if (m_bindings.empty()) {
50 "No node bindings configured for NodeBindingsProcessor");
51 return;
52 }
53
54 auto& pc_data = get_push_constant_data();
55
56 for (auto& [name, binding] : m_bindings) {
57
58 if (!binding.node) {
60 "Node binding '{}' has null node", name);
61 continue;
62 }
63 double value {};
64 uint32_t state = binding.node->m_state.load();
65
66 if (state == Utils::NodeState::INACTIVE) {
67 value = binding.node->process_sample();
68 } else {
69 binding.node->save_state();
70 value = binding.node->process_sample();
71 binding.node->restore_state();
72 }
73
74 if (binding.size == sizeof(float)) {
75 auto float_val = static_cast<float>(value);
76 std::memcpy(
77 pc_data.data() + binding.push_constant_offset,
78 &float_val,
79 sizeof(float));
80 } else if (binding.size == sizeof(double)) {
81 std::memcpy(
82 pc_data.data() + binding.push_constant_offset,
83 &value,
84 sizeof(double));
85 }
86 }
87}
#define MF_RT_ERROR(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
std::unordered_map< std::string, NodeBinding > m_bindings
const std::vector< uint8_t > & get_push_constant_data() const
Get current push constant data.
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.
@ INACTIVE
Engine is not processing this node.
Definition Utils.hpp:29

References MayaFlux::Journal::BufferProcessing, MayaFlux::Journal::Buffers, MayaFlux::Buffers::ShaderProcessor::get_push_constant_data(), MayaFlux::Utils::INACTIVE, m_bindings, MF_RT_ERROR, and MF_WARN.

Referenced by on_before_dispatch().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: