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
17 void init(RenderList& renderer, QRhiResourceUpdateBatch& res) override;
18 void update(RenderList& renderer, QRhiResourceUpdateBatch& res, Edge* edge) override;
19 void release(RenderList& r) override;
20
21 void initState(RenderList& renderer, QRhiResourceUpdateBatch& res) override;
22 void releaseState(RenderList& renderer) override;
23 void addOutputPass(
24 RenderList& renderer, Edge& edge, QRhiResourceUpdateBatch& res) override;
25 void removeOutputPass(RenderList& renderer, Edge& edge) override;
26 bool hasOutputPassForEdge(Edge& edge) const override;
27
28 void runInitialPasses(
29 RenderList&, QRhiCommandBuffer& commands, QRhiResourceUpdateBatch*& res,
30 Edge& edge) override;
31
32 void runRenderPass(RenderList&, QRhiCommandBuffer& commands, Edge& edge) override;
33
34private:
35 void initPass(
36 const TextureRenderTarget& rt, RenderList& renderer, Edge& edge,
37 QRhiResourceUpdateBatch& res);
38
39 std::vector<Sampler> allSamplers() const noexcept;
40
41 struct PassData
42 {
43 Edge* edge;
44 Pass main_pass;
45 QRhiGraphicsPipeline* background_pipeline{};
46 QRhiShaderResourceBindings* background_srb{};
47 QRhiBuffer* background_ubo{};
48 MeshBuffers background_tri{};
49 };
50
51 ossia::small_vector<PassData, 2> m_passes;
52
53 ISFNode& n;
54
55 std::vector<Sampler> m_inputSamplers;
56 std::vector<Sampler> m_audioSamplers;
57
58 Mesh* m_mesh{};
59
60 QRhiBuffer* m_materialUBO{};
61 int m_materialSize{};
62
63 std::optional<AudioTextureUpload> m_audioTex;
64
65 int m_prevFormat{};
66};
67}
Data model for Interactive Shader Format filters.
Definition ISFNode.hpp:22
Renderer for a given node.
Definition NodeRenderer.hpp:11
List of nodes to be rendered to an output.
Definition RenderList.hpp:30
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:103
Definition Mesh.hpp:94
Data model for meshes.
Definition Mesh.hpp:179
Definition NodeRenderer.hpp:245
Port of a score::gfx::Node.
Definition score-plugin-gfx/Gfx/Graph/Utils.hpp:82
Definition RenderedVSANode.hpp:10
void updateInputTexture(const Port &input, QRhiTexture *tex, QRhiTexture *depthTex=nullptr) override
Definition RenderedVSANode.cpp:36
bool hasOutputPassForEdge(Edge &edge) const override
Check if this renderer already has an output pass for the given edge.
Definition RenderedVSANode.cpp:347
void removeOutputPass(RenderList &renderer, Edge &edge) override
Definition RenderedVSANode.cpp:323
void initState(RenderList &renderer, QRhiResourceUpdateBatch &res) override
Definition RenderedVSANode.cpp:255
void addOutputPass(RenderList &renderer, Edge &edge, QRhiResourceUpdateBatch &res) override
Create a pass for a new output edge (pipeline, SRB, processUBO).
Definition RenderedVSANode.cpp:313
void releaseState(RenderList &renderer) override
Definition RenderedVSANode.cpp:442
Useful abstraction for storing all the data related to a render target.
Definition score-plugin-gfx/Gfx/Graph/Utils.hpp:152