17 using TextureResolver = std::function<std::shared_ptr<Core::VKImage>(
const std::string& path)>;
50MAYAFLUX_API
void register_node(
const std::shared_ptr<Nodes::Node>& node,
const CreationContext& ctx);
51MAYAFLUX_API
void register_network(
const std::shared_ptr<Nodes::Network::NodeNetwork>& network,
const CreationContext& ctx);
52MAYAFLUX_API
void register_buffer(
const std::shared_ptr<Buffers::Buffer>& buffer,
const CreationContext& ctx);
53MAYAFLUX_API
void register_container(
const std::shared_ptr<Kakshya::SoundFileContainer>& container,
const Domain& domain);
74 return {
value, std::vector<uint32_t>(chs) };
86 explicit MeshGroupHandle(std::vector<std::shared_ptr<Buffers::MeshBuffer>> buffers);
91 auto begin() {
return m_buffers.begin(); }
92 auto end() {
return m_buffers.end(); }
93 [[nodiscard]]
auto begin()
const {
return m_buffers.begin(); }
94 [[nodiscard]]
auto end()
const {
return m_buffers.end(); }
96 [[nodiscard]]
bool empty()
const {
return m_buffers.empty(); }
97 [[nodiscard]]
size_t size()
const {
return m_buffers.size(); }
99 std::shared_ptr<Buffers::MeshBuffer>&
operator[](
size_t i) {
return m_buffers[i]; }
102 std::vector<std::shared_ptr<Buffers::MeshBuffer>>
m_buffers;
107#define N(method_name, full_type_name) \
108 template <typename... Args> \
109 requires std::constructible_from<full_type_name, Args...> \
110 auto method_name(Args&&... args) -> std::shared_ptr<full_type_name> \
112 auto obj = std::make_shared<full_type_name>(std::forward<Args>(args)...); \
113 MF_LIVE_EXPOSE_NAMED(#method_name, obj); \
119#define W(method_name, full_type_name) \
120 template <typename... Args> \
121 requires std::constructible_from<full_type_name, Args...> \
122 auto method_name(Args&&... args) -> std::shared_ptr<full_type_name> \
124 auto obj = std::make_shared<full_type_name>(std::forward<Args>(args)...); \
125 MF_LIVE_EXPOSE_NAMED(#method_name, obj); \
131#define B(method_name, full_type_name) \
132 template <typename... Args> \
133 requires std::constructible_from<full_type_name, Args...> \
134 auto method_name(Args&&... args) -> std::shared_ptr<full_type_name> \
136 auto obj = std::make_shared<full_type_name>(std::forward<Args>(args)...); \
137 MF_LIVE_EXPOSE_NAMED(#method_name, obj); \
143 auto read_audio(
const std::string& filepath) -> std::shared_ptr<Kakshya::SoundFileContainer>
145 auto container = load_sound_container(filepath);
150 auto read_image(
const std::string& filepath) -> std::shared_ptr<Buffers::TextureBuffer>
152 auto buffer = load_image_buffer(filepath);
163 const std::string& filepath,
165 -> std::shared_ptr<Nodes::Network::MeshNetwork>
167 auto network = load_mesh_network(filepath, std::move(resolver));
182 std::shared_ptr<Nodes::Input::HIDNode> read_hid(
192 std::shared_ptr<Nodes::Input::MIDINode> read_midi(
202 std::shared_ptr<Nodes::Input::OSCNode> read_osc(
212 std::shared_ptr<Nodes::Input::InputNode> read_input(
217 std::shared_ptr<Kakshya::SoundFileContainer> load_sound_container(
const std::string& filepath);
218 std::shared_ptr<Buffers::TextureBuffer> load_image_buffer(
const std::string& filepath);
219 std::vector<std::shared_ptr<Buffers::MeshBuffer>> load_mesh_buffers(
const std::string& filepath);
220 std::shared_ptr<Nodes::Network::MeshNetwork> load_mesh_network(
const std::string& filepath,
IO::TextureResolver resolver);
230 requires std::is_base_of_v<Nodes::Node, T>
233 register_node(std::static_pointer_cast<Nodes::Node>(obj), ctx);
238 requires std::is_base_of_v<Nodes::Network::NodeNetwork, T>
241 register_network(std::static_pointer_cast<Nodes::Network::NodeNetwork>(obj), ctx);
246 requires std::is_base_of_v<Buffers::Buffer, T>
253inline std::shared_ptr<Kakshya::SoundFileContainer>
operator|(
254 std::shared_ptr<Kakshya::SoundFileContainer> obj,
293extern MAYAFLUX_API Creator
vega;
#define MF_LIVE_EXPOSE_AUTO(ptr)
Auto-expose variant that deduces the key prefix from the shared_ptr element type.
#define ALL_NODE_NETWORK_REGISTRATIONS
#define ALL_NODE_REGISTRATIONS
#define ALL_BUFFER_REGISTRATION
auto read_audio(const std::string &filepath) -> std::shared_ptr< Kakshya::SoundFileContainer >
auto read_mesh_network(const std::string &filepath, IO::TextureResolver resolver=nullptr) -> std::shared_ptr< Nodes::Network::MeshNetwork >
auto read_image(const std::string &filepath) -> std::shared_ptr< Buffers::TextureBuffer >
auto read_mesh(const std::string &filepath) -> MeshGroupHandle
std::vector< std::shared_ptr< Buffers::MeshBuffer > > m_buffers
std::shared_ptr< Buffers::MeshBuffer > & operator[](size_t i)
std::function< std::shared_ptr< Core::VKImage >(const std::string &path)> TextureResolver
Callable that maps a raw material texture path to a GPU image.
@ Core
Core engine, backend, subsystems.
@ IO
Networking, file handling, streaming.
Creator vega
Global Creator instance.
void register_node(const std::shared_ptr< Nodes::Node > &node, const Nodes::ProcessingToken &token, uint32_t channel)
void register_buffer(const std::shared_ptr< Buffers::Buffer > &buffer, const CreationContext &ctx)
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.
static constexpr DomainSpec Audio
Domain constant for Audio domain.
static constexpr DomainSpec Graphics
Domain constant for Graphics domain.
void register_network(const std::shared_ptr< Nodes::Network::NodeNetwork > &network, const CreationContext &ctx)
std::shared_ptr< T > operator|(std::shared_ptr< T > obj, const CreationContext &ctx)
Main namespace for the Maya Flux audio engine.
CreationContext(Domain d)
CreationContext(std::vector< uint32_t > ch)
std::optional< uint32_t > channel
CreationContext(Domain d, std::vector< uint32_t > ch)
CreationContext(uint32_t ch)
CreationContext(Domain d, uint32_t ch)
std::optional< std::vector< uint32_t > > channels
CreationContext()=default
std::optional< Domain > domain
CreationContext operator[](uint32_t ch) const
Bind a single channel to this domain.
CreationContext operator[](std::initializer_list< uint32_t > chs) const
Bind multiple channels to this domain.
Thin domain wrapper that adds subscript channel-binding syntax.