Loading...
Searching...
No Matches
RenderedISFNode.hpp
1#pragma once
2#include <Gfx/Graph/ISFNode.hpp>
3#include <Gfx/Graph/NodeRenderer.hpp>
4#include <Gfx/Graph/RenderedISFUtils.hpp>
5
6namespace score::gfx
7{
9{
10 RenderedISFNode(const ISFNode& node) noexcept;
11
12 virtual ~RenderedISFNode();
13
14 TextureRenderTarget renderTargetForInput(const Port& p) override;
15
16 void init(RenderList& renderer, QRhiResourceUpdateBatch& res) override;
17 void update(RenderList& renderer, QRhiResourceUpdateBatch& res, Edge* e) override;
18 void release(RenderList& r) override;
19
20 void runInitialPasses(
21 RenderList&, QRhiCommandBuffer& commands, QRhiResourceUpdateBatch*& res,
22 Edge& edge) override;
23
24 void runRenderPass(RenderList&, QRhiCommandBuffer& commands, Edge& edge) override;
25
26private:
27 ossia::small_flat_map<const Port*, TextureRenderTarget, 2> m_rts;
28
29 std::pair<Pass, Pass> createPass(
30 RenderList& renderer, ossia::small_vector<PassOutput, 1>& m_passSamplers,
31 PassOutput target, bool previousPassIsPersistent);
32
33 std::pair<Pass, Pass> createFinalPass(
34 RenderList& renderer, ossia::small_vector<PassOutput, 1>& m_passSamplers,
35 const TextureRenderTarget& target);
36 void initPasses(
37 const TextureRenderTarget& rt, RenderList& renderer, Edge& edge, QSize mainTexSize,
38 QRhiResourceUpdateBatch& res);
39
40 PassOutput initPassSampler(
41 ISFNode& n, const isf::pass& pass, RenderList& renderer, QSize mainTexSize,
42 QRhiResourceUpdateBatch& res);
43
44 struct Passes
45 {
46 ossia::small_vector<Pass, 1> passes;
47 ossia::small_vector<Pass, 1> altPasses;
48 ossia::small_vector<PassOutput, 1> samplers;
49 };
50
51 std::vector<Sampler>
52 allSamplers(ossia::small_vector<PassOutput, 1>&, int mainOrAltPass) const noexcept;
53
54 ossia::small_vector<std::pair<Edge*, Passes>, 2> m_passes;
55
56 ISFNode& n;
57
58 std::vector<Sampler> m_inputSamplers;
59 std::vector<Sampler> m_audioSamplers;
60
61 std::vector<TextureRenderTarget> m_innerPassTargets;
62
63 const Mesh* m_mesh{};
64 QRhiBuffer* m_meshBuffer{};
65 QRhiBuffer* m_idxBuffer{};
66
67 QRhiBuffer* m_materialUBO{};
68 int m_materialSize{};
69
70 AudioTextureUpload m_audioTex;
71};
72
73}
Data model for Interactive Shader Format filters.
Definition ISFNode.hpp:20
Renderer for a given node.
Definition NodeRenderer.hpp:11
List of nodes to be rendered to an output.
Definition RenderList.hpp:19
Graphics rendering pipeline for ossia score.
Definition Filter/PreviewWidget.hpp:12
Definition RenderedISFUtils.hpp:27
Connection between two score::gfx::Port.
Definition score-plugin-gfx/Gfx/Graph/Utils.hpp:70
Data model for meshes.
Definition Mesh.hpp:23
Port of a score::gfx::Node.
Definition score-plugin-gfx/Gfx/Graph/Utils.hpp:52
Definition RenderedISFNode.hpp:9
Useful abstraction for storing all the data related to a render target.
Definition score-plugin-gfx/Gfx/Graph/Utils.hpp:115