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 explicit RenderedISFNode(const ISFNode& node) noexcept;
11
12 virtual ~RenderedISFNode();
13
14 TextureRenderTarget renderTargetForInput(const Port& p) override;
15 void updateInputTexture(const Port& input, QRhiTexture* tex) override;
16
17 void init(RenderList& renderer, QRhiResourceUpdateBatch& res) override;
18 void update(RenderList& renderer, QRhiResourceUpdateBatch& res, Edge* e) override;
19 void release(RenderList& r) override;
20
21 void runInitialPasses(
22 RenderList&, QRhiCommandBuffer& commands, QRhiResourceUpdateBatch*& res,
23 Edge& edge) override;
24
25 void runRenderPass(RenderList&, QRhiCommandBuffer& commands, Edge& edge) override;
26
27private:
28 ossia::small_flat_map<const Port*, TextureRenderTarget, 2> m_rts;
29
30 std::pair<Pass, Pass> createPass(
31 RenderList& renderer, ossia::small_vector<PassOutput, 1>& m_passSamplers,
32 PassOutput target, bool previousPassIsPersistent);
33
34 std::pair<Pass, Pass> createFinalPass(
35 RenderList& renderer, ossia::small_vector<PassOutput, 1>& m_passSamplers,
36 const TextureRenderTarget& target);
37 void initPasses(
38 const TextureRenderTarget& rt, RenderList& renderer, Edge& edge, QSize mainTexSize,
39 QRhiResourceUpdateBatch& res);
40
41 PassOutput initPassSampler(
42 ISFNode& n, const isf::pass& pass, RenderList& renderer, QSize mainTexSize,
43 QRhiResourceUpdateBatch& res);
44
45 struct Passes
46 {
47 ossia::small_vector<Pass, 1> passes;
48 ossia::small_vector<Pass, 1> altPasses;
49 ossia::small_vector<PassOutput, 1> samplers;
50 };
51
52 std::vector<Sampler>
53 allSamplers(ossia::small_vector<PassOutput, 1>&, int mainOrAltPass) const noexcept;
54
55 ossia::small_vector<std::pair<Edge*, Passes>, 2> m_passes;
56
57 ISFNode& n;
58
59 std::vector<Sampler> m_inputSamplers;
60 std::vector<Sampler> m_audioSamplers;
61
62 std::vector<TextureRenderTarget> m_innerPassTargets;
63
64 const Mesh* m_mesh{};
65 MeshBuffers m_meshBuffer{};
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:74
Definition Mesh.hpp:23
Data model for meshes.
Definition Mesh.hpp:30
Port of a score::gfx::Node.
Definition score-plugin-gfx/Gfx/Graph/Utils.hpp:53
Definition RenderedISFNode.hpp:9
void updateInputTexture(const Port &input, QRhiTexture *tex) override
Definition RenderedISFNode.cpp:94
Useful abstraction for storing all the data related to a render target.
Definition score-plugin-gfx/Gfx/Graph/Utils.hpp:119