33MAYAFLUX_API std::shared_ptr<Nodes::Node>
operator|(
const std::shared_ptr<Nodes::Node>& node,
Domain d);
34MAYAFLUX_API std::shared_ptr<Buffers::Buffer>
operator|(
const std::shared_ptr<Buffers::Buffer>& buffer,
Domain d);
35MAYAFLUX_API std::shared_ptr<Nodes::NodeNetwork>
operator|(
const std::shared_ptr<Nodes::NodeNetwork>& network,
Domain d);
37MAYAFLUX_API
void register_node(
const std::shared_ptr<Nodes::Node>& node,
const CreationContext& ctx);
38MAYAFLUX_API
void register_network(
const std::shared_ptr<Nodes::NodeNetwork>& network,
const CreationContext& ctx);
39MAYAFLUX_API
void register_buffer(
const std::shared_ptr<Buffers::Buffer>& buffer,
const CreationContext& ctx);
40MAYAFLUX_API
void register_container(
const std::shared_ptr<Kakshya::SoundFileContainer>& container,
const Domain& domain);
45 using std::shared_ptr<T>::shared_ptr;
48 :
std::shared_ptr<T>(ptr)
53 :
std::shared_ptr<T>(
std::move(ptr))
80 template <
typename... Args>
83 static_assert(
sizeof...(args) > 0,
"channels() requires at least one argument");
84 static_assert((std::is_convertible_v<Args, uint32_t> && ...),
85 "All arguments must be convertible to uint32_t");
87 m_ctx.
channels = std::vector<uint32_t> {
static_cast<uint32_t
>(args)... };
106 if constexpr (std::is_base_of_v<Kakshya::SignalSourceContainer, T>) {
112 if constexpr (std::is_base_of_v<Nodes::Node, T>) {
116 }
else if constexpr (std::is_base_of_v<Buffers::Buffer, T>) {
120 }
else if constexpr (std::is_base_of_v<Nodes::NodeNetwork, T>) {
127 if constexpr (std::is_base_of_v<Buffers::VKBuffer, T>) {
131 if constexpr (std::is_base_of_v<Nodes::Node, T>) {
134 if constexpr (std::is_base_of_v<Nodes::NodeNetwork, T>) {
147 std::shared_ptr<Nodes::Node> node = std::static_pointer_cast<Nodes::Node>(*
this);
156 std::shared_ptr<Nodes::NodeNetwork> network = std::static_pointer_cast<Nodes::NodeNetwork>(*
this);
165 std::shared_ptr<Buffers::Buffer> buffer = std::static_pointer_cast<Buffers::Buffer>(*
this);
174 std::shared_ptr<Kakshya::SoundFileContainer> container = std::static_pointer_cast<Kakshya::SoundFileContainer>(*
this);
183#define N(method_name, full_type_name) \
184 template <typename... Args> \
185 auto method_name(Args&&... args) -> CreationHandle<full_type_name> \
187 auto obj = std::make_shared<full_type_name>(std::forward<Args>(args)...); \
188 return CreationHandle<full_type_name>(obj); \
193#define W(method_name, full_type_name) \
194 template <typename... Args> \
195 auto method_name(Args&&... args) -> CreationHandle<full_type_name> \
197 auto obj = std::make_shared<full_type_name>(std::forward<Args>(args)...); \
198 return CreationHandle<full_type_name>(obj); \
203#define B(method_name, full_type_name) \
204 template <typename... Args> \
205 auto method_name(Args&&... args) -> CreationHandle<full_type_name> \
207 auto obj = std::make_shared<full_type_name>(std::forward<Args>(args)...); \
208 return CreationHandle<full_type_name>(obj); \
215 auto container = load_container(filepath);
221 auto buffer = load_buffer(filepath);
226 std::shared_ptr<Kakshya::SoundFileContainer> load_container(
const std::string& filepath);
227 std::shared_ptr<Buffers::TextureBuffer> load_buffer(
const std::string& filepath);
#define ALL_NODE_NETWORK_REGISTRATIONS
#define ALL_NODE_REGISTRATIONS
#define ALL_BUFFER_REGISTRATION
CreationHandle & domain(Domain d)
void apply_buffer_context()
void apply_network_context()
CreationHandle(std::shared_ptr< T > &&ptr)
void apply_node_context()
CreationHandle & operator|(Domain d)
CreationHandle & channel(uint32_t ch)
CreationHandle & operator[](uint32_t ch)
CreationHandle & channels(Args... args)
CreationHandle(const std::shared_ptr< T > &ptr)
CreationHandle & channels(std::vector< uint32_t > ch)
void apply_container_context()
CreationHandle & operator[](std::initializer_list< uint32_t > ch_list)
auto read_image(const std::string &filepath) -> CreationHandle< Buffers::TextureBuffer >
auto read_audio(const std::string &filepath) -> CreationHandle< Kakshya::SoundFileContainer >
Creator vega
Global Creator instance for creating nodes, buffers, and containers.
void register_node(const std::shared_ptr< Nodes::Node > &node, const Nodes::ProcessingToken &token, uint32_t channel)
static constexpr auto Graphics
Domain constant for Graphics domain.
void register_network(const std::shared_ptr< Nodes::NodeNetwork > &network, const CreationContext &ctx)
static constexpr auto Audio
Domain constant for Audio domain.
void register_buffer(const std::shared_ptr< Buffers::Buffer > &buffer, const CreationContext &ctx)
std::shared_ptr< Nodes::Node > operator|(const std::shared_ptr< Nodes::Node > &node, Domain d)
static std::vector< std::shared_ptr< Buffers::ContainerBuffer > > s_last_created_container_buffers
std::vector< std::shared_ptr< Buffers::ContainerBuffer > > get_last_created_container_buffers()
Retrieves the last created container buffers from the Creator.
void register_container(const std::shared_ptr< Kakshya::SoundFileContainer > &container, const Domain &domain)
Domain
Unified domain enum combining all three ProcessingToken subsystems.
@ AUDIO
Standard real-time audio processing domain.
@ GRAPHICS
Standard real-time graphics processing domain.
Main namespace for the Maya Flux audio engine.
CreationContext(Domain d)
CreationContext(std::vector< uint32_t > ch)
std::optional< uint32_t > channel
CreationContext(uint32_t ch)
CreationContext(Domain d, uint32_t ch)
std::optional< std::vector< uint32_t > > channels
CreationContext()=default
std::optional< Domain > domain