Loading...
Searching...
No Matches
GfxParameter.hpp
1#pragma once
2#include <Gfx/GfxContext.hpp>
3#include <Gfx/GfxExecContext.hpp>
4
5#include <ossia/gfx/texture_parameter.hpp>
6#include <ossia/network/base/device.hpp>
7#include <ossia/network/base/parameter.hpp>
8#include <ossia/network/base/protocol.hpp>
9
10namespace Gfx
11{
12class gfx_parameter_base : public ossia::gfx::texture_parameter
13{
14protected:
15 GfxExecutionAction* context{};
16 std::shared_ptr<bool> context_alive;
17
18 bool contextAlive() const noexcept
19 {
20 return context && context_alive && *context_alive;
21 }
22
23public:
24 score::gfx::Node* node{};
25 int32_t node_id{score::gfx::invalid_node_index};
26
28 ossia::net::node_base& n, score::gfx::Node* node, GfxExecutionAction* ctx)
29 : texture_parameter{n}
30 , context{ctx}
31 , context_alive{ctx ? ctx->alive : nullptr}
32 , node{node}
33 {
34 node_id = context->ui->register_node(std::unique_ptr<score::gfx::Node>{node});
35 }
36
37 void push_texture(port_index idx)
38 {
39 port_index source = idx;
40 port_index sink = port_index{this->node_id, 0};
41 context->setEdge(source, sink, Process::CableType::ImmediateGlutton);
42 }
43
44 virtual ~gfx_parameter_base()
45 {
46 if(contextAlive())
47 context->ui->unregister_node(node_id);
48 }
49};
50
51class gfx_protocol_base : public ossia::net::protocol_base
52{
53public:
55 : protocol_base{flags{}}
56 , context{&ctx}
57 {
58 }
59 GfxExecutionAction* context{};
60 bool pull(ossia::net::parameter_base&) override { return false; }
61 bool push(const ossia::net::parameter_base&, const ossia::value& v) override
62 {
63 return false;
64 }
65 bool push_raw(const ossia::net::full_parameter_data&) override { return false; }
66 bool observe(ossia::net::parameter_base&, bool) override { return false; }
67 bool update(ossia::net::node_base& node_base) override { return false; }
68};
69
70class gfx_node_base : public ossia::net::node_base
71{
72 ossia::net::device_base& m_device;
73 gfx_node_base* m_parent{};
74 std::unique_ptr<gfx_parameter_base> m_parameter;
75
76public:
78 ossia::net::device_base& dev, gfx_protocol_base& proto, score::gfx::Node* gfxmodel,
79 std::string name)
80 : m_device{dev}
81 , m_parameter{std::make_unique<gfx_parameter_base>(*this, gfxmodel, proto.context)}
82 {
83 m_name = std::move(name);
84 }
85
86 gfx_parameter_base* get_parameter() const override { return m_parameter.get(); }
87
88private:
89 ossia::net::device_base& get_device() const override { return m_device; }
90 ossia::net::node_base* get_parent() const override { return m_parent; }
91 ossia::net::node_base& set_name(std::string) override { return *this; }
92 ossia::net::parameter_base* create_parameter(ossia::val_type) override
93 {
94 return m_parameter.get();
95 }
96 bool remove_parameter() override { return false; }
97
98 std::unique_ptr<ossia::net::node_base> make_child(const std::string& name) override
99 {
100 return {};
101 }
102 void removing_child(ossia::net::node_base& node_base) override { }
103};
104
105}
Definition GfxExecContext.hpp:18
Definition GfxParameter.hpp:71
Definition GfxParameter.hpp:13
Definition GfxParameter.hpp:52
Root data model for visual nodes.
Definition score-plugin-gfx/Gfx/Graph/Node.hpp:74
Binds the rendering pipeline to ossia processes.
Definition AssetTable.cpp:7