Loading...
Searching...
No Matches
Metadatas.hpp
1#pragma once
2
3#include <Crousti/Concepts.hpp>
4#include <Crousti/SceneConcepts.hpp>
5
6#include <ossia/dataflow/safe_nodes/port.hpp>
7
8#include <boost/mp11/algorithm.hpp>
9
10#include <avnd/introspection/input.hpp>
11#include <avnd/introspection/output.hpp>
12namespace oscr
13{
14template <typename T>
15concept GpuNode
16 = avnd::texture_input_introspection<T>::size > 0
17 || avnd::texture_output_introspection<T>::size > 0
18 || avnd::buffer_input_introspection<T>::size > 0
19 || avnd::buffer_output_introspection<T>::size > 0
20 || avnd::geometry_input_introspection<T>::size > 0
21 || avnd::geometry_output_introspection<T>::size > 0
22 || scene_input_introspection<T>::size > 0
23 || scene_output_introspection<T>::size > 0
24 || avnd::gpu_render_target_output_port_output_introspection<T>::size > 0;
25
26// Halp shader nodes (vertex+fragment / compute) currently route through
27// CustomGpuRenderer / GpuComputeRenderer, neither of which carries
28// geometry_ / scene_ I/O storage today. Exclude nodes that declare those
29// ports from the GpuGraphicsNode2 / GpuComputeNode2 dispatch so they fall
30// through to GfxNode<> (which has the proper storage via CpuFilterNode /
31// CpuAnalysisNode). When CustomGpuRenderer / GpuComputeRenderer gain
32// dedicated scene_ / geometry_ storage, drop the requires-clause exclusion
33// here and add init_input + readInput / upload paths in those renderers.
34template <typename T>
36 = requires { T::layout::graphics; }
37 && (avnd::geometry_input_introspection<T>::size == 0)
38 && (avnd::geometry_output_introspection<T>::size == 0)
39 && (scene_input_introspection<T>::size == 0)
40 && (scene_output_introspection<T>::size == 0);
41
42template <typename T>
44 = requires { T::layout::compute; }
45 && (avnd::geometry_input_introspection<T>::size == 0)
46 && (avnd::geometry_output_introspection<T>::size == 0)
47 && (scene_input_introspection<T>::size == 0)
48 && (scene_output_introspection<T>::size == 0);
49
50template <typename T>
52
59template <typename T>
61 = requires(T& t) { t.renderlist; } || requires { &T::init; }
62 || requires { &T::update; } || requires { &T::release; }
63 || requires { &T::runInitialPasses; } || requires { &T::runRenderPass; }
64 || requires { &T::inputAboutToFinish; };
65
78template <typename T>
80 = avnd::cpu_buffer_output_introspection<T>::size > 0
81 && avnd::gpu_buffer_output_introspection<T>::size == 0
82 && avnd::buffer_input_introspection<T>::size == 0
83 && avnd::texture_input_introspection<T>::size == 0
84 && avnd::texture_output_introspection<T>::size == 0
85 && avnd::geometry_input_introspection<T>::size == 0
86 && avnd::geometry_output_introspection<T>::size == 0
87 && scene_input_introspection<T>::size == 0
88 && scene_output_introspection<T>::size == 0
89 && avnd::gpu_render_target_output_port_output_introspection<T>::size == 0
91
92template <typename T>
93concept has_ossia_layer = requires { sizeof(typename T::Layer); };
94}
Definition Metadatas.hpp:80
Definition Metadatas.hpp:44
Definition Metadatas.hpp:36
Definition Metadatas.hpp:16
Definition Metadatas.hpp:93
Definition Metadatas.hpp:61
Definition Metadatas.hpp:51
Definition Controls.hpp:27