NodeRenderer.hpp
1 #pragma once
2 #include <Gfx/Graph/Node.hpp>
3 
4 namespace score::gfx
5 {
6 
10 class SCORE_PLUGIN_GFX_EXPORT NodeRenderer
11 {
12 public:
13  explicit NodeRenderer() noexcept;
14  virtual ~NodeRenderer();
15 
16  virtual TextureRenderTarget renderTargetForInput(const Port& input) = 0;
17 
20  virtual void
21  inputAboutToFinish(RenderList& renderer, const Port& p, QRhiResourceUpdateBatch*&);
22 
23  virtual void init(RenderList& renderer, QRhiResourceUpdateBatch& res) = 0;
24  virtual void update(RenderList& renderer, QRhiResourceUpdateBatch& res) = 0;
25 
26  virtual void runInitialPasses(
27  RenderList&, QRhiCommandBuffer& commands, QRhiResourceUpdateBatch*& res,
28  Edge& edge);
29 
30  virtual void runRenderPass(RenderList&, QRhiCommandBuffer& commands, Edge& edge);
31 
32  virtual void release(RenderList&) = 0;
33 };
34 
35 using PassMap = ossia::small_vector<std::pair<Edge*, Pipeline>, 2>;
36 SCORE_PLUGIN_GFX_EXPORT
37 void defaultPassesInit(
38  PassMap& passes, const std::vector<Edge*>& edges, RenderList& renderer,
39  const Mesh& mesh, const QShader& v, const QShader& f, QRhiBuffer* processUBO,
40  QRhiBuffer* matUBO, const std::vector<Sampler>& samplers);
41 
42 SCORE_PLUGIN_GFX_EXPORT
43 void defaultRenderPass(
44  RenderList& renderer, const Mesh& mesh, const MeshBuffers& bufs,
45  QRhiCommandBuffer& cb, Edge& edge, PassMap& passes);
46 
47 SCORE_PLUGIN_GFX_EXPORT
48 void quadRenderPass(
49  RenderList& renderer, const MeshBuffers& bufs, QRhiCommandBuffer& cb, Edge& edge,
50  PassMap& passes);
51 
58 class SCORE_PLUGIN_GFX_EXPORT GenericNodeRenderer : public score::gfx::NodeRenderer
59 {
60 public:
61  GenericNodeRenderer(const NodeModel& node) noexcept
62  : NodeRenderer{}
63  , node{node}
64  {
65  }
66 
67  TextureRenderTarget renderTargetForInput(const Port& p) override;
68  virtual ~GenericNodeRenderer() { }
69 
70  const NodeModel& node;
71  std::vector<Sampler> m_samplers;
72 
73  QShader m_vertexS;
74  QShader m_fragmentS;
75 
76  // Pipeline
77  PassMap m_p;
78 
79  MeshBuffers m_meshbufs;
80 
81  QRhiBuffer* m_processUBO{};
82 
83  DefaultShaderMaterial m_material;
84  int64_t materialChangedIndex{-1};
85  int64_t geometryChangedIndex{-1};
86 
87  const score::gfx::Mesh* m_mesh{};
88 
89  // Render loop
90  void
91  defaultMeshInit(RenderList& renderer, const Mesh& mesh, QRhiResourceUpdateBatch& res);
92  void processUBOInit(RenderList& renderer);
93  void defaultPassesInit(RenderList& renderer, const Mesh& mesh);
94  void defaultPassesInit(
95  RenderList& renderer, const Mesh& mesh, const QShader& v, const QShader& f);
96 
97  void init(RenderList& renderer, QRhiResourceUpdateBatch& res) override;
98 
99  void defaultUBOUpdate(RenderList& renderer, QRhiResourceUpdateBatch& res);
100  void defaultMeshUpdate(RenderList& renderer, QRhiResourceUpdateBatch& res);
101  void update(RenderList& renderer, QRhiResourceUpdateBatch& res) override;
102 
103  void defaultRelease(RenderList&);
104  void release(RenderList&) override;
105 
106  void defaultRenderPass(
107  RenderList&, const Mesh& mesh, QRhiCommandBuffer& commands, Edge& edge);
108 
109  void defaultRenderPass(
110  RenderList&, const Mesh& mesh, QRhiCommandBuffer& commands, Edge& edge,
111  PassMap& passes);
112 
113  void runRenderPass(RenderList&, QRhiCommandBuffer& commands, Edge& edge) override;
114 };
115 
116 }
Generic renderer.
Definition: NodeRenderer.hpp:59
Common base class for most single-pass, simple nodes.
Definition: score-plugin-gfx/Gfx/Graph/Node.hpp:180
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: PreviewWidget.hpp:12
Utility to represent a shader material following score conventions.
Definition: score-plugin-gfx/Gfx/Graph/Utils.hpp:243
Connection between two score::gfx::Port.
Definition: score-plugin-gfx/Gfx/Graph/Utils.hpp:64
Definition: Mesh.hpp:14
Data model for meshes.
Definition: Mesh.hpp:22
Port of a score::gfx::Node.
Definition: score-plugin-gfx/Gfx/Graph/Utils.hpp:46
Useful abstraction for storing all the data related to a render target.
Definition: score-plugin-gfx/Gfx/Graph/Utils.hpp:109