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