73 using NodePtr = std::unique_ptr<score::gfx::Node>;
78 int32_t register_node(NodePtr node);
79 int32_t register_preview_node(NodePtr node);
80 void connect_preview_node(
EdgeSpec e);
81 void disconnect_preview_node(
EdgeSpec e);
82 void unregister_node(int32_t idx);
83 void unregister_preview_node(int32_t idx);
94 std::span<score::gfx::OutputNode* const> outputs()
const noexcept;
96 void recompute_edges();
97 void recompute_graph();
98 void recompute_connections();
99 void recomputeTimers();
100 void recomputeGraphTopology();
101 void incrementalEdgeUpdate(
102 const ossia::flat_set<EdgeSpec>& old_edges,
103 const ossia::flat_set<EdgeSpec>& cur_edges);
105 void update_inputs();
131 void renderFrames(
int frames);
134 double stepRate() const noexcept {
return m_stepRate; }
135 void setStepRate(
double fps)
noexcept { m_stepRate = fps; }
139 tick_messages.enqueue(std::move(msg));
152 const AssetTable& assets() const noexcept {
return m_assets; }
157 void remove_preview_output();
158 void add_edge(EdgeSpec e);
159 void remove_edge(EdgeSpec e);
160 void remove_node(std::vector<std::unique_ptr<score::gfx::Node>>& nursery, int32_t
id);
165 std::atomic_int32_t index{1};
166 ossia::hash_map<int32_t, NodePtr> nodes;
171 double m_stepRate{60.};
172 int64_t m_stepFrame{};
185 std::unique_ptr<score::gfx::Node> node;
192 CONNECT_PREVIEW_NODE,
193 DISCONNECT_PREVIEW_NODE
198 using Command = ossia::variant<NodeCommand, EdgeCommand>;
199 moodycamel::ConcurrentQueue<Command> tick_commands;
200 moodycamel::ConcurrentQueue<score::gfx::Message> tick_messages;
201 std::vector<std::pair<score::gfx::Message, int>> m_deferredMessages;
203 std::mutex edges_lock;
204 ossia::flat_set<EdgeSpec> new_edges TS_GUARDED_BY(edges_lock);
205 ossia::flat_set<EdgeSpec> edges TS_GUARDED_BY(edges_lock);
206 ossia::flat_set<EdgeSpec> preview_edges TS_GUARDED_BY(edges_lock);
207 std::atomic_bool edges_changed{};
208 bool m_fullRebuildThisFrame{};
213 QTimer* m_freewheel_timer{};
220 std::vector<std::unique_ptr<score::gfx::TimerClock>> m_renderClocks;
221 std::unique_ptr<score::gfx::DisplayVSyncClock> m_vsyncClock;
223 ossia::object_pool<std::vector<score::gfx::gfx_input>> m_buffers;
Definition GfxContext.hpp:69
double stepRate() const noexcept
Step used by renderFrames(), in frames per second.
Definition GfxContext.hpp:134
AssetTable & assets() noexcept
Session-wide content-hash decode cache.
Definition GfxContext.hpp:151
Base class for sink nodes (QWindow, spout, syphon, NDI output, ...)
Definition OutputNode.hpp:54
Definition DocumentContext.hpp:18