Loading...
Searching...
No Matches
TexturePort.hpp
1#pragma once
2#include <Process/Dataflow/Port.hpp>
3
4#include <Dataflow/PortItem.hpp>
5#include <Gfx/CommandFactory.hpp>
6
7#include <score/command/PropertyCommand.hpp>
8
9#include <ossia/dataflow/texture_port.hpp>
10
11#include <score_plugin_gfx_export.h>
12
13namespace Gfx
14{
15class TextureInlet;
16class TextureOutlet;
17}
18UUID_METADATA(, Process::Port, Gfx::TextureInlet, "5ac86198-2d03-4830-9e41-a6d529922d29")
19UUID_METADATA(
20 , Process::Port, Gfx::TextureOutlet, "f1c71046-b754-49a5-8e66-d01374773dfc")
21namespace Gfx
22{
23
24class SCORE_PLUGIN_GFX_EXPORT TextureInlet : public Process::Inlet
25{
26 W_OBJECT(TextureInlet)
27
28 SCORE_SERIALIZE_FRIENDS
29public:
30 MODEL_METADATA_IMPL_HPP(TextureInlet)
31 TextureInlet() = delete;
32 ~TextureInlet() override;
33 TextureInlet(const TextureInlet&) = delete;
34 TextureInlet(Id<Process::Port> c, QObject* parent);
35
36 TextureInlet(DataStream::Deserializer& vis, QObject* parent);
37 TextureInlet(JSONObject::Deserializer& vis, QObject* parent);
38 TextureInlet(DataStream::Deserializer&& vis, QObject* parent);
39 TextureInlet(JSONObject::Deserializer&& vis, QObject* parent);
40
41 VIRTUAL_CONSTEXPR Process::PortType type() const noexcept override
42 {
43 return Process::PortType::Texture;
44 }
45
46 std::optional<QSize> renderSize() const noexcept;
47 void renderSizeChanged(std::optional<QSize> sz) W_SIGNAL(renderSizeChanged, sz);
48 void setRenderSize(std::optional<QSize> sz);
49 void unsetRenderSize();
50
51 PROPERTY(
52 std::optional<QSize>,
53 renderSize W_READ renderSize W_WRITE setRenderSize W_NOTIFY renderSizeChanged)
54
55 INLINE_PROPERTY_VALUE(
56 ossia::texture_format, textureFormat, = ossia::texture_format::RGBA8,
57 textureFormat, setTextureFormat, textureFormatChanged)
58 INLINE_PROPERTY_VALUE(
59 ossia::texture_filter, textureFilter, = ossia::texture_filter::LINEAR,
60 textureFilter, setTextureFilter, textureFilterChanged)
61 INLINE_PROPERTY_VALUE(
62 ossia::texture_address_mode, textureAddressMode,
63 = ossia::texture_address_mode::CLAMP_TO_EDGE, textureAddressMode,
64 setTextureAddressMode, textureAddressModeChanged)
65
66 void setupExecution(ossia::inlet&, QObject* exec_context) const noexcept override;
67
68private:
69 std::optional<QSize> m_renderSize;
70};
71
72class SCORE_PLUGIN_GFX_EXPORT TextureOutlet : public Process::Outlet
73{
74 W_OBJECT(TextureOutlet)
75
76 SCORE_SERIALIZE_FRIENDS
77public:
78 MODEL_METADATA_IMPL_HPP(TextureOutlet)
79 TextureOutlet() = delete;
80 ~TextureOutlet() override;
81 TextureOutlet(const TextureOutlet&) = delete;
82 TextureOutlet(Id<Process::Port> c, QObject* parent);
83
84 TextureOutlet(DataStream::Deserializer& vis, QObject* parent);
85 TextureOutlet(JSONObject::Deserializer& vis, QObject* parent);
86 TextureOutlet(DataStream::Deserializer&& vis, QObject* parent);
87 TextureOutlet(JSONObject::Deserializer&& vis, QObject* parent);
88
89 VIRTUAL_CONSTEXPR Process::PortType type() const noexcept override
90 {
91 return Process::PortType::Texture;
92 }
93
94 int nodeId{-1};
95};
96
97struct TextureInletFactory final : public Dataflow::AutomatablePortFactory
98{
99 using Model_T = TextureInlet;
100 UuidKey<Process::Port> concreteKey() const noexcept override
101 {
103 }
104
105 Model_T* load(const VisitorVariant& vis, QObject* parent) override
106 {
107 return score::deserialize_dyn(vis, [&](auto&& deserializer) {
108 return new Model_T{deserializer, parent};
109 });
110 }
111
112 void setupInletInspector(
113 const Process::Inlet& port, const score::DocumentContext& ctx, QWidget* parent,
114 Inspector::Layout& lay, QObject* context) override;
115};
116
117struct TextureOutletFactory final : public Dataflow::AutomatablePortFactory
118{
119 using Model_T = TextureOutlet;
120 UuidKey<Process::Port> concreteKey() const noexcept override
121 {
123 }
124
125 Model_T* load(const VisitorVariant& vis, QObject* parent) override
126 {
127 return score::deserialize_dyn(vis, [&](auto&& deserializer) {
128 return new Model_T{deserializer, parent};
129 });
130 }
131
132 void setupOutletInspector(
133 const Process::Outlet& port, const score::DocumentContext& ctx, QWidget* parent,
134 Inspector::Layout& lay, QObject* context) override;
135};
136}
137
138namespace Gfx
139{
140class GeometryInlet;
141class GeometryOutlet;
142}
143UUID_METADATA(
144 , Process::Port, Gfx::GeometryInlet, "f2ab26ea-415d-45a2-bfbc-2968c7c92a33")
145UUID_METADATA(
146 , Process::Port, Gfx::GeometryOutlet, "848061c5-e8a0-4a13-9985-e8df30ce6d4f")
147namespace Gfx
148{
149
150class SCORE_PLUGIN_GFX_EXPORT GeometryInlet : public Process::Inlet
151{
152 W_OBJECT(GeometryInlet)
153
154 SCORE_SERIALIZE_FRIENDS
155public:
156 MODEL_METADATA_IMPL_HPP(GeometryInlet)
157 GeometryInlet() = delete;
158 ~GeometryInlet() override;
159 GeometryInlet(const GeometryInlet&) = delete;
160 GeometryInlet(Id<Process::Port> c, QObject* parent);
161
162 GeometryInlet(DataStream::Deserializer& vis, QObject* parent);
163 GeometryInlet(JSONObject::Deserializer& vis, QObject* parent);
164 GeometryInlet(DataStream::Deserializer&& vis, QObject* parent);
165 GeometryInlet(JSONObject::Deserializer&& vis, QObject* parent);
166
167 VIRTUAL_CONSTEXPR Process::PortType type() const noexcept override
168 {
169 return Process::PortType::Geometry;
170 }
171};
172
173class SCORE_PLUGIN_GFX_EXPORT GeometryOutlet : public Process::Outlet
174{
175 W_OBJECT(GeometryOutlet)
176
177 SCORE_SERIALIZE_FRIENDS
178public:
179 MODEL_METADATA_IMPL_HPP(GeometryOutlet)
180 GeometryOutlet() = delete;
181 ~GeometryOutlet() override;
182 GeometryOutlet(const GeometryOutlet&) = delete;
183 GeometryOutlet(Id<Process::Port> c, QObject* parent);
184
185 GeometryOutlet(DataStream::Deserializer& vis, QObject* parent);
186 GeometryOutlet(JSONObject::Deserializer& vis, QObject* parent);
187 GeometryOutlet(DataStream::Deserializer&& vis, QObject* parent);
188 GeometryOutlet(JSONObject::Deserializer&& vis, QObject* parent);
189
190 VIRTUAL_CONSTEXPR Process::PortType type() const noexcept override
191 {
192 return Process::PortType::Geometry;
193 }
194};
195
197{
198 using Model_T = GeometryInlet;
199 UuidKey<Process::Port> concreteKey() const noexcept override
200 {
202 }
203
204 Model_T* load(const VisitorVariant& vis, QObject* parent) override
205 {
206 return score::deserialize_dyn(vis, [&](auto&& deserializer) {
207 return new Model_T{deserializer, parent};
208 });
209 }
210};
211
213{
214 using Model_T = GeometryOutlet;
215 UuidKey<Process::Port> concreteKey() const noexcept override
216 {
218 }
219
220 Model_T* load(const VisitorVariant& vis, QObject* parent) override
221 {
222 return score::deserialize_dyn(vis, [&](auto&& deserializer) {
223 return new Model_T{deserializer, parent};
224 });
225 }
226};
227}
228
229W_REGISTER_ARGTYPE(std::optional<QSize>);
230W_REGISTER_ARGTYPE(ossia::texture_format);
231W_REGISTER_ARGTYPE(ossia::texture_filter);
232W_REGISTER_ARGTYPE(ossia::texture_address_mode);
233
234PROPERTY_COMMAND_T(
235 Gfx, ChangeTextureInletRenderSize, TextureInlet::p_renderSize,
236 "Change render target size")
237SCORE_COMMAND_DECL_T(Gfx::ChangeTextureInletRenderSize)
238
239PROPERTY_COMMAND_T(
240 Gfx, ChangeTextureInletFormat, TextureInlet::p_textureFormat,
241 "Change render target format")
242SCORE_COMMAND_DECL_T(Gfx::ChangeTextureInletFormat)
243
244PROPERTY_COMMAND_T(
245 Gfx, ChangeTextureInletFilter, TextureInlet::p_textureFilter,
246 "Change render target filter")
247SCORE_COMMAND_DECL_T(Gfx::ChangeTextureInletFilter)
248
249PROPERTY_COMMAND_T(
250 Gfx, ChangeTextureInletAddressMode, TextureInlet::p_textureAddressMode,
251 "Change render target address mode")
252SCORE_COMMAND_DECL_T(Gfx::ChangeTextureInletAddressMode)
Definition DataStreamVisitor.hpp:202
Definition score-plugin-dataflow/Dataflow/PortItem.hpp:37
Definition TexturePort.hpp:151
Definition TexturePort.hpp:174
Definition lib/score/widgets/Layout.hpp:29
Definition JSONVisitor.hpp:423
Definition Port.hpp:177
Definition Port.hpp:273
Definition Port.hpp:102
Definition UuidKey.hpp:343
The id_base_t class.
Definition Identifier.hpp:57
Binds the rendering pipeline to ossia processes.
Definition CameraDevice.cpp:28
Base classes and tools to implement processes and layers.
Definition JSONVisitor.hpp:1324
STL namespace.
Definition TexturePort.hpp:197
Definition TexturePort.hpp:213
Static metadata implementation.
Definition lib/score/tools/Metadata.hpp:36
The VisitorVariant struct.
Definition VisitorInterface.hpp:26
Definition DocumentContext.hpp:18