4#include <ossia/detail/variant.hpp>
46 port_counts operator()(
const isf::float_input&)
const noexcept {
return {1, 0, 0}; }
47 port_counts operator()(
const isf::long_input&)
const noexcept {
return {1, 0, 0}; }
48 port_counts operator()(
const isf::event_input&)
const noexcept {
return {1, 0, 0}; }
49 port_counts operator()(
const isf::bool_input&)
const noexcept {
return {1, 0, 0}; }
50 port_counts operator()(
const isf::point2d_input&)
const noexcept {
return {1, 0, 0}; }
51 port_counts operator()(
const isf::point3d_input&)
const noexcept {
return {1, 0, 0}; }
52 port_counts operator()(
const isf::color_input&)
const noexcept {
return {1, 0, 0}; }
53 port_counts operator()(
const isf::audio_input&)
const noexcept {
return {1, 0, 0}; }
54 port_counts operator()(
const isf::audioHist_input&)
const noexcept{
return {1, 0, 0}; }
55 port_counts operator()(
const isf::audioFFT_input&)
const noexcept {
return {1, 0, 0}; }
57 port_counts operator()(
const isf::image_input& in)
const noexcept
62 const bool grabs = (in.dimensions == 3 || in.is_array || in.is_static);
63 const int extra_depth_sampler = (in.depth && !grabs) ? 1 : 0;
64 return {1, 0, 1 + extra_depth_sampler};
66 port_counts operator()(
const isf::cubemap_input&)
const noexcept {
return {1, 0, 1}; }
67 port_counts operator()(
const isf::texture_input&)
const noexcept {
return {1, 0, 1}; }
69 port_counts operator()(
const isf::storage_input& in)
const noexcept
74 if(in.access ==
"read_only")
78 && in.layout.back().type.find(
"[]") != std::string::npos)
83 port_counts operator()(
const isf::uniform_input&)
const noexcept
88 port_counts operator()(
const isf::csf_image_input& in)
const noexcept
91 if(in.access ==
"read_only")
96 port_counts operator()(
const isf::geometry_input& in)
const noexcept
101 if(in.passes_through())
109 if(in.reads_upstream())
111 for(
const auto& attr : in.attributes)
112 if(attr.access ==
"write_only" || attr.access ==
"read_write")
113 { c.outlets = 1;
break; }
117 if(in.vertex_count.find(
"$USER") != std::string::npos) c.inlets++;
118 if(in.instance_count.find(
"$USER") != std::string::npos) c.inlets++;
119 for(
const auto& aux : in.auxiliary)
120 if(aux.size.find(
"$USER") != std::string::npos)
137inline void walk_descriptor_inputs(
138 const isf::descriptor& desc,
port_counts start, F&& fn)
141 for(
const auto& inp : desc.inputs)
152inline void walk_descriptor_inputs(
const isf::descriptor& desc, F&& fn)
154 walk_descriptor_inputs(desc, port_counts{}, std::forward<F>(fn));
161inline int storage_array_size_port(
const isf::descriptor& desc, std::string_view name)
164 walk_descriptor_inputs(
165 desc, [&](
const isf::input& inp, port_counts cur, port_counts delta) {
166 if(port >= 0 || inp.name != name)
168 if(
auto* s = ossia::get_if<isf::storage_input>(&inp.data);
169 s && s->access !=
"read_only" && delta.inlets == 1)
178 void operator()(
const isf::float_input&)
noexcept { sz += 4; }
180 void operator()(
const isf::long_input&)
noexcept { sz += 4; }
182 void operator()(
const isf::event_input&)
noexcept
187 void operator()(
const isf::bool_input&)
noexcept
192 void operator()(
const isf::point2d_input&)
noexcept
199 void operator()(
const isf::point3d_input&)
noexcept
208 void operator()(
const isf::color_input&)
noexcept
217 void operator()(
const isf::image_input&)
noexcept { }
218 void operator()(
const isf::cubemap_input&)
noexcept { }
220 void operator()(
const isf::audio_input&)
noexcept { }
221 void operator()(
const isf::audioFFT_input&)
noexcept { }
222 void operator()(
const isf::audioHist_input&)
noexcept { }
225 void operator()(
const isf::storage_input& in)
noexcept
232 if(in.access.contains(
"write") && !in.layout.empty()
233 && in.layout.back().type.find(
"[]") != std::string::npos)
235 (*this)(isf::long_input{});
239 void operator()(
const isf::uniform_input&)
noexcept
245 void operator()(
const isf::texture_input in)
noexcept { }
247 void operator()(
const isf::csf_image_input& in)
noexcept
255 void operator()(
const isf::geometry_input& in)
noexcept
260 if(in.vertex_count.find(
"$USER") != std::string::npos)
261 (*this)(isf::long_input{});
262 if(in.instance_count.find(
"$USER") != std::string::npos)
263 (*
this)(isf::long_input{});
264 for(
const auto& aux : in.auxiliary)
265 if(aux.size.find(
"$USER") != std::string::npos)
266 (*
this)(isf::long_input{});
280std::vector<S> samplersInInputOrder(
281 const isf::descriptor& desc, std::span<const S>
image, std::span<const S> audio)
284 out.reserve(
image.size() + audio.size());
285 std::size_t i = 0, a = 0;
287 if(ossia::get_if<isf::audio_input>(&inp.data)
288 || ossia::get_if<isf::audioFFT_input>(&inp.data)
289 || ossia::get_if<isf::audioHist_input>(&inp.data))
292 out.push_back(audio[a++]);
296 out.push_back(
image[i++]);
298 out.insert(out.end(), image.begin() + i, image.end());
299 out.insert(out.end(), audio.begin() + a, audio.end());
Graphics rendering pipeline for ossia score.
Definition Filter/PreviewWidget.hpp:11
Definition Uniforms.hpp:5
Definition ISFVisitors.hpp:25
int outlets
score output ports created
Definition ISFVisitors.hpp:27
int samplers
Definition ISFVisitors.hpp:28
int inlets
score input ports created by this desc.inputs entry
Definition ISFVisitors.hpp:26