77 std::vector<Process::PortType> port;
78 void audio() { port.push_back(Process::PortType::Audio); }
79 void midi() { port.push_back(Process::PortType::Midi); }
80 void value() { port.push_back(Process::PortType::Message); }
81 void buffer() { port.push_back(Process::PortType::Texture); }
82 void texture() { port.push_back(Process::PortType::Texture); }
83 void geometry() { port.push_back(Process::PortType::Geometry); }
85 template <std::
size_t N, oscr::ossia_value_port Port>
86 void operator()(
const avnd::field_reflection<N, Port>)
90 template <std::
size_t N, oscr::ossia_audio_port Port>
91 void operator()(
const avnd::field_reflection<N, Port>)
96 template <std::
size_t N, oscr::ossia_m
idi_port Port>
97 void operator()(
const avnd::field_reflection<N, Port>)
102 template <std::
size_t N, avnd::dynamic_ports_port Port>
103 void operator()(
const avnd::field_reflection<N, Port>)
105 using port_type =
typename decltype(std::declval<Port>().ports)::value_type;
106 (*this)(avnd::field_reflection<std::size_t{0}, port_type>{});
109 template <std::
size_t N, avnd::audio_port Port>
110 void operator()(
const avnd::field_reflection<N, Port>)
115 template <std::
size_t N, avnd::m
idi_port Port>
116 void operator()(
const avnd::field_reflection<N, Port>)
121 template <std::
size_t N, avnd::parameter_port Port>
122 requires(!oscr::ossia_port<Port> && !avnd::curve_port<Port>)
123 void operator()(
const avnd::field_reflection<N, Port>)
128 template <std::
size_t N, avnd::file_port Port>
129 void operator()(
const avnd::field_reflection<N, Port>)
134 template <std::
size_t N, avnd::soundfile_port Port>
135 void operator()(
const avnd::field_reflection<N, Port>)
140 template <std::
size_t N, avnd::m
idifile_port Port>
141 void operator()(
const avnd::field_reflection<N, Port>)
146 template <std::
size_t N, avnd::buffer_port Port>
147 void operator()(
const avnd::field_reflection<N, Port>)
152 template <std::
size_t N, avnd::texture_port Port>
153 void operator()(
const avnd::field_reflection<N, Port>)
158 template <std::
size_t N, avnd::gpu_render_target_output_port Port>
159 void operator()(
const avnd::field_reflection<N, Port>)
163 template <std::
size_t N, avnd::geometry_port Port>
164 void operator()(
const avnd::field_reflection<N, Port>)
170 template <std::
size_t N, oscr::scene_port Port>
171 requires(!avnd::geometry_port<Port>)
172 void operator()(
const avnd::field_reflection<N, Port>)
177 template <std::
size_t N, avnd::curve_port Port>
178 void operator()(
const avnd::field_reflection<N, Port>)
183 template <std::
size_t N, avnd::callback Port>
184 void operator()(
const avnd::field_reflection<N, Port>)
189 void operator()(
auto&&) =
delete;
195 static std::vector<Process::PortType> inletDescription()
198 avnd::input_introspection<Info>::for_all(vis);
201 static std::vector<Process::PortType> outletDescription()
204 avnd::output_introspection<Info>::for_all(vis);
207 static Process::ProcessCategory kind()
noexcept
209 Process::ProcessCategory cat;
213 cat = Process::ProcessCategory::Other;
220#define if_exists(Expr, Else) \
227#define if_attribute(Attr) QString{}
229#define if_exists(Expr, Else) \
231 if constexpr(requires { Expr; }) \
236#define if_attribute(Attr) \
237 []() noexcept -> QString { \
238 if constexpr(avnd::has_##Attr<Info>) \
239 return oscr::fromStringView(avnd::get_##Attr<Info>()); \
247 if_attribute(category),
248 if_attribute(description),
249 if_attribute(author),
253 if_attribute(manual_url)};