Loading...
Searching...
No Matches
GfxInputDevice.hpp
1#pragma once
2#include <Gfx/GfxDevice.hpp>
3#include <Gfx/GfxExecContext.hpp>
4#include <ossia/gfx/texture_parameter.hpp>
5#include <ossia/network/base/device.hpp>
6#include <ossia/network/base/protocol.hpp>
7namespace Video
8{
9class ExternalInput;
10}
11namespace score::gfx {
12class CameraNode;
13}
14namespace Gfx
15{
16
17class simple_texture_input_protocol : public ossia::net::protocol_base
18{
19public:
21 : protocol_base{flags{}}
22 {
23 }
24
25 bool pull(ossia::net::parameter_base&) override { return false; }
26 bool push(const ossia::net::parameter_base&, const ossia::value& v) override
27 {
28 return false;
29 }
30 bool push_raw(const ossia::net::full_parameter_data&) override { return false; }
31 bool observe(ossia::net::parameter_base&, bool) override { return false; }
32 bool update(ossia::net::node_base& node_base) override { return false; }
33
34 void start_execution() override { }
35 void stop_execution() override { }
36};
37
38class simple_texture_input_parameter : public ossia::gfx::texture_parameter
39{
40 GfxExecutionAction* context{};
41
42public:
43 int32_t node_id{score::gfx::invalid_node_index};
44 score::gfx::Node* node{};
45
47 score::gfx::Node* gfx_n, GfxExecutionAction* ctx, ossia::net::node_base& n)
48 : ossia::gfx::texture_parameter{n}
49 , context{ctx}
50 , node{gfx_n}
51 {
52 node_id = context->ui->register_node(std::unique_ptr<score::gfx::Node>{gfx_n});
53 }
54
55 void pull_texture(ossia::gfx::port_index idx) override
56 {
57 context->setEdge(
58 port_index{this->node_id, 0}, idx, Process::CableType::ImmediateGlutton);
59
61 m.node_id = node_id;
62 context->ui->send_message(std::move(m));
63 }
64
65 virtual ~simple_texture_input_parameter() { context->ui->unregister_node(node_id); }
66};
67
69class simple_texture_input_node : public ossia::net::node_base
70{
71 ossia::net::device_base& m_device;
72 node_base* m_parent{};
73 std::unique_ptr<simple_texture_input_parameter> m_parameter;
74
75public:
77 score::gfx::Node* gfx_n, GfxExecutionAction* context, ossia::net::device_base& dev,
78 std::string name)
79 : m_device{dev}
80 , m_parameter{
81 std::make_unique<simple_texture_input_parameter>(gfx_n, context, *this)}
82 {
83 m_name = std::move(name);
84 }
85
86 simple_texture_input_parameter* get_parameter() const override
87 {
88 return m_parameter.get();
89 }
90
91private:
92 ossia::net::device_base& get_device() const override { return m_device; }
93 ossia::net::node_base* get_parent() const override { return m_parent; }
94 ossia::net::node_base& set_name(std::string) override { return *this; }
95 ossia::net::parameter_base* create_parameter(ossia::val_type) override
96 {
97 return m_parameter.get();
98 }
99 bool remove_parameter() override { return false; }
100
101 std::unique_ptr<ossia::net::node_base> make_child(const std::string& name) override
102 {
103 return {};
104 }
105 void removing_child(ossia::net::node_base& node_base) override { }
106};
107
108class simple_texture_input_device : public ossia::net::device_base
109{
111
112public:
114 score::gfx::Node* gfx_n, GfxExecutionAction* context,
115 std::unique_ptr<ossia::net::protocol_base> proto, std::string name)
116 : ossia::net::device_base{std::move(proto)}
117 , root{gfx_n, context, *this, name}
118 {
119 }
120
121 const simple_texture_input_node& get_root_node() const override { return root; }
122 simple_texture_input_node& get_root_node() override { return root; }
123};
124
125class SCORE_PLUGIN_GFX_EXPORT video_texture_input_protocol
126 : public ossia::net::protocol_base
127{
128public:
129 std::shared_ptr<::Video::ExternalInput> camera;
131 std::shared_ptr<::Video::ExternalInput> cam, GfxExecutionAction& ctx);
133
134 GfxExecutionAction* context{};
135 bool pull(ossia::net::parameter_base&) override;
136 bool push(const ossia::net::parameter_base&, const ossia::value& v) override;
137 bool push_raw(const ossia::net::full_parameter_data&) override;
138 bool observe(ossia::net::parameter_base&, bool) override;
139 bool update(ossia::net::node_base& node_base) override;
140
141 void start_execution() override;
142 void stop_execution() override;
143
144 score::gfx::CameraNode* camera_node{};
145};
146
147class SCORE_PLUGIN_GFX_EXPORT video_texture_input_parameter
148 : public ossia::gfx::texture_parameter
149{
151 GfxExecutionAction* context{};
152
153public:
154 std::shared_ptr<::Video::ExternalInput> camera;
155 int32_t node_id{};
156 score::gfx::CameraNode* node{};
157
159 ossia::net::node_base& n, video_texture_input_protocol& proto);
160 void pull_texture(ossia::gfx::port_index idx) override;
161
163};
164
166class SCORE_PLUGIN_GFX_EXPORT video_texture_input_node : public ossia::net::node_base
167{
168 ossia::net::device_base& m_device;
169 node_base* m_parent{};
170 std::unique_ptr<video_texture_input_parameter> m_parameter;
171
172public:
173 video_texture_input_node(ossia::net::device_base& dev, std::string name);
175
176 video_texture_input_parameter* get_parameter() const override;
177
178private:
179 ossia::net::device_base& get_device() const override;
180 ossia::net::node_base* get_parent() const override;
181 ossia::net::node_base& set_name(std::string) override;
182 ossia::net::parameter_base* create_parameter(ossia::val_type) override;
183 bool remove_parameter() override;
184
185 std::unique_ptr<ossia::net::node_base> make_child(const std::string& name) override;
186 void removing_child(ossia::net::node_base& node_base) override;
187};
188
189class SCORE_PLUGIN_GFX_EXPORT video_texture_input_device : public ossia::net::device_base
190{
192
193public:
195 std::unique_ptr<ossia::net::protocol_base> proto, std::string name)
196 : ossia::net::device_base{std::move(proto)}
197 , root{*this, name}
198 {
199 }
201
202 const video_texture_input_node& get_root_node() const override { return root; }
203 video_texture_input_node& get_root_node() override { return root; }
204};
205
206}
Definition GfxExecContext.hpp:16
Definition GfxInputDevice.hpp:109
Definition GfxInputDevice.hpp:70
Definition GfxInputDevice.hpp:39
Definition GfxInputDevice.hpp:18
Definition GfxInputDevice.hpp:190
Definition GfxInputDevice.hpp:167
Definition GfxInputDevice.hpp:149
Definition GfxInputDevice.hpp:127
Root data model for visual nodes.
Definition score-plugin-gfx/Gfx/Graph/Node.hpp:74
Binds the rendering pipeline to ossia processes.
Definition CameraDevice.cpp:30
Graphics rendering pipeline for ossia score.
Definition Filter/PreviewWidget.hpp:12
Definition score-plugin-gfx/Gfx/Graph/Node.hpp:49