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