43 : m_fn_name(
std::move(fn_name))
49 [[nodiscard]]
const std::string&
fn_name()
const {
return m_fn_name; }
52 void set_fn_name(std::string name) { m_fn_name = std::move(name); }
60 [[nodiscard]]
const std::optional<glm::vec3>&
position()
const {
return m_position; }
76 [[nodiscard]] uint32_t
id()
const {
return m_id; }
91 std::string fn_name =
"")
93 add_audio_sink(m_audio_sinks, mgr, channel, std::move(fn), std::move(fn_name));
99 Nexus::remove_audio_sink(m_audio_sinks, mgr, channel);
112 add_render_sink(m_render_sinks, mgr, config, std::move(fn), std::move(fn_name), m_position);
115 [[nodiscard]]
const std::vector<AudioSink>&
audio_sinks()
const {
return m_audio_sinks; }
116 [[nodiscard]]
const std::vector<RenderSink>&
render_sinks()
const {
return m_render_sinks; }
120 const std::shared_ptr<Core::Window>& window)
const
122 auto it = std::ranges::find_if(m_render_sinks,
124 return it != m_render_sinks.end() ? it->renderer :
nullptr;
145 void set_vertices(
const void* data,
size_t byte_count);
151 template <
typename T>
154 static_assert(
sizeof(T) == 60,
"set_vertices: T must be a 60-byte vertex type");
155 set_vertices(vertices.data(), vertices.size_bytes());
162 [[nodiscard]]
float intensity()
const {
return m_intensity; }
168 [[nodiscard]]
float radius()
const {
return m_radius; }
177 [[nodiscard]]
const std::optional<glm::vec3>&
color()
const {
return m_color; }
186 [[nodiscard]]
const std::optional<float>&
size()
const {
return m_size; }
199 void set_influence_target(std::shared_ptr<Buffers::RenderProcessor> proc);
207 void clear_influence_target();
214 return m_influence_target;
229 upload_influence_ubo(ctx);
236 float m_intensity { 1.0F };
237 float m_radius { 1.0F };
Token-based multimodal buffer management system for unified data stream processing.
const std::string & fn_name() const
Identifier assigned to the influence function, empty if anonymous.
const std::optional< glm::vec3 > & position() const
Return the current position, if set.
float radius() const
Get the current radius.
std::weak_ptr< Buffers::RenderProcessor > influence_target() const
Return the current influence target, if set.
std::shared_ptr< Buffers::VKBuffer > m_influence_ubo
std::optional< float > m_size
const std::vector< AudioSink > & audio_sinks() const
const InfluenceFn & fn() const
The influence function itself.
std::optional< glm::vec3 > m_color
void sink_audio(Buffers::BufferManager &mgr, uint32_t channel)
Register an audio output on channel.
void clear_size()
Clear the size, resetting it to an unset state.
uint32_t id() const
Return the stable object id assigned by Fabric.
std::function< void(const InfluenceContext &)> InfluenceFn
std::shared_ptr< Buffers::RenderProcessor > m_influence_target
std::optional< glm::vec3 > m_position
void set_intensity(float i)
Set the intensity, a general-purpose parameter for influence functions.
const std::optional< float > & size() const
Get the current size, if set.
void set_size(float s)
Set the size, a general-purpose parameter for influence functions.
void render(Buffers::BufferManager &mgr, const Portal::Graphics::RenderConfig &config)
Register a render output targeting window.
void set_radius(float r)
Set the radius, a general-purpose parameter for influence functions.
const std::vector< RenderSink > & render_sinks() const
void render(Buffers::BufferManager &mgr, const Portal::Graphics::RenderConfig &config, std::string fn_name, RenderFn fn)
Register a render output targeting window with a producer function.
std::vector< AudioSink > m_audio_sinks
void sink_audio(Buffers::BufferManager &mgr, uint32_t channel, std::function< Kakshya::DataVariant(const InfluenceContext &)> fn, std::string fn_name="")
Register an audio output on channel with a producer function.
void set_vertices(std::span< const T > vertices)
Set typed vertex data to all registered render sinks.
void remove_render(Buffers::BufferManager &mgr, const std::shared_ptr< Core::Window > &window)
Unregister the render sink targeting window.
std::vector< RenderSink > m_render_sinks
const std::optional< glm::vec3 > & color() const
Get the current color, if set.
void invoke(const InfluenceContext &ctx) const
Invoke the influence function with the supplied context.
Emitter(std::string fn_name, InfluenceFn fn)
Construct with a named influence function.
std::shared_ptr< Buffers::RenderProcessor > get_render_processor(const std::shared_ptr< Core::Window > &window) const
void clear_color()
Clear the color, resetting it to an unset state.
void clear_position()
Clear the position, removing this object from spatial queries.
float intensity() const
Get the current intensity.
void set_color(const glm::vec3 &c)
Set the color, a general-purpose parameter for influence functions.
void set_audio_data(std::span< const double > samples)
Push samples to all registered audio sinks.
void set_fn_name(std::string name)
Set or replace the influence function's identifier.
void set_position(const glm::vec3 &p)
Set the position, enabling spatial indexing for this object.
Emitter(InfluenceFn fn)
Construct with an influence function.
void remove_audio_sink(Buffers::BufferManager &mgr, uint32_t channel)
Unregister the audio sink on channel.
Object that acts on existing MayaFlux objects when committed.
Orchestrates spatial indexing and scheduling for Nexus objects.
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
std::function< void(const InfluenceContext &)> RenderFn
void remove_render_sink(std::vector< RenderSink > &sinks, Buffers::BufferManager &mgr, const std::shared_ptr< Core::Window > &window)
Unregister and destroy the render sink targeting window.
void dispatch_render_sinks(std::vector< RenderSink > &sinks, const InfluenceContext &ctx)
For each sink that has a producer fn, call it and push the result.
void push_audio_data(std::vector< AudioSink > &sinks, std::span< const double > samples)
Push samples to every audio sink in sinks.
void dispatch_audio_sinks(std::vector< AudioSink > &sinks, const InfluenceContext &ctx)
For each sink that has a producer fn, call it and push the result.
void add_audio_sink(std::vector< AudioSink > &sinks, Buffers::BufferManager &mgr, uint32_t channel, std::function< Kakshya::DataVariant(const InfluenceContext &)> fn, std::string fn_name)
Create and register an audio sink on channel.
void add_render_sink(std::vector< RenderSink > &sinks, Buffers::BufferManager &mgr, const Portal::Graphics::RenderConfig &config, RenderFn fn, std::string fn_name, const std::optional< glm::vec3 > &initial_position)
Create and register a render sink targeting window.
Data passed to an Emitter or Agent influence function on each commit.
std::shared_ptr< Core::Window > window
Holds the plumbing for one graphics output registered from a Nexus object.
Unified rendering configuration for graphics buffers.