Loading...
Searching...
No Matches
RenderedVSANode.hpp
1#pragma once
2
3#include <Gfx/Graph/ISFNode.hpp>
4#include <Gfx/Graph/NodeRenderer.hpp>
5#include <Gfx/Graph/RenderedISFUtils.hpp>
6
7namespace score::gfx
8{
10{
11 explicit SimpleRenderedVSANode(const ISFNode& node) noexcept;
12
13 virtual ~SimpleRenderedVSANode();
14
15 void updateInputTexture(const Port& input, QRhiTexture* tex, QRhiTexture* depthTex = nullptr) override;
16 void updateInputSamplerFilter(const Port& input, const RenderTargetSpecs& spec) override;
17
18 void init(RenderList& renderer, QRhiResourceUpdateBatch& res) override;
19 void update(RenderList& renderer, QRhiResourceUpdateBatch& res, Edge* edge) override;
20 void release(RenderList& r) override;
21
22 void initState(RenderList& renderer, QRhiResourceUpdateBatch& res) override;
23 void releaseState(RenderList& renderer) override;
24 void addOutputPass(
25 RenderList& renderer, Edge& edge, QRhiResourceUpdateBatch& res) override;
26 void removeOutputPass(RenderList& renderer, Edge& edge) override;
27 bool hasOutputPassForEdge(Edge& edge) const override;
28
29 void runInitialPasses(
30 RenderList&, QRhiCommandBuffer& commands, QRhiResourceUpdateBatch*& res,
31 Edge& edge) override;
32
33 void runRenderPass(RenderList&, QRhiCommandBuffer& commands, Edge& edge) override;
34
35private:
36 void initPass(
37 const TextureRenderTarget& rt, RenderList& renderer, Edge& edge,
38 QRhiResourceUpdateBatch& res);
39
40 std::vector<Sampler> allSamplers() const noexcept;
41
42 struct PassData
43 {
44 Edge* edge;
45 Pass main_pass;
46 QRhiGraphicsPipeline* background_pipeline{};
47 QRhiShaderResourceBindings* background_srb{};
48 QRhiBuffer* background_ubo{};
49 MeshBuffers background_tri{};
50 };
51
52 ossia::small_vector<PassData, 2> m_passes;
53
54 ISFNode& n;
55
56 std::vector<Sampler> m_inputSamplers;
57 std::vector<Sampler> m_audioSamplers;
58
59 Mesh* m_mesh{};
60
61 // Primitive modes QRhi cannot draw directly are drawn from an index list
62 // over the vertex ids, rebuilt when the count changes: LINE_LOOP as a line
63 // strip 0, 1, ..., N - 1, 0, and TRI_FAN on a backend without triangle fans
64 // as triangles {0, i - 1, i}.
65 enum class IndexList : uint8_t
66 {
67 None,
68 LineLoop,
69 TriangleFan
70 } m_indexList{};
71 QRhiBuffer* m_indices{};
72 int m_indexVertexCount{-1};
73
74 QRhiBuffer* m_materialUBO{};
75 int m_materialSize{};
76
77 std::optional<AudioTextureUpload> m_audioTex;
78
79 int m_prevFormat{};
80 int64_t m_frameIndexFrame{-1};
81};
82}
Definition ISFNode.hpp:39
Renderer for a given node.
Definition NodeRenderer.hpp:11
List of nodes to be rendered to an output.
Definition RenderList.hpp:36
Graphics rendering pipeline for ossia score.
Definition Filter/PreviewWidget.hpp:11
Connection between two score::gfx::Port.
Definition score-plugin-gfx/Gfx/Graph/Utils.hpp:236
Definition Mesh.hpp:95
Data model for meshes.
Definition Mesh.hpp:196
Definition NodeRenderer.hpp:268
Port of a score::gfx::Node.
Definition score-plugin-gfx/Gfx/Graph/Utils.hpp:215
Definition score-plugin-gfx/Gfx/Graph/Node.hpp:71
Definition RenderedVSANode.hpp:10
void updateInputTexture(const Port &input, QRhiTexture *tex, QRhiTexture *depthTex=nullptr) override
Definition RenderedVSANode.cpp:47
bool hasOutputPassForEdge(Edge &edge) const override
Check if this renderer already has an output pass for the given edge.
Definition RenderedVSANode.cpp:371
void removeOutputPass(RenderList &renderer, Edge &edge) override
Definition RenderedVSANode.cpp:347
void initState(RenderList &renderer, QRhiResourceUpdateBatch &res) override
Definition RenderedVSANode.cpp:258
void addOutputPass(RenderList &renderer, Edge &edge, QRhiResourceUpdateBatch &res) override
Create a pass for a new output edge (pipeline, SRB, processUBO).
Definition RenderedVSANode.cpp:337
void updateInputSamplerFilter(const Port &input, const RenderTargetSpecs &spec) override
Definition RenderedVSANode.cpp:41
void releaseState(RenderList &renderer) override
Definition RenderedVSANode.cpp:494
Useful abstraction for storing all the data related to a render target.
Definition score-plugin-gfx/Gfx/Graph/Utils.hpp:307