18 friend class Graphics;
19 friend class GraphicsState;
20 friend class RendererRuntimeAccess;
24 virtual ~Renderer() =
default;
30 bool HasSubrender()
const
32 return subrender_holder_.Has<T>();
36 T* GetSubrender()
const
38 return subrender_holder_.Get<T>();
41 template <
typename T,
typename... Args>
42 T* AddSubrender(
const Subrender::Stage& pipeline_stage, Args&&... args)
44 return subrender_holder_.Add<T>(pipeline_stage, std::make_unique<T>(pipeline_stage, std::forward<Args>(args)...));
48 void RemoveSubrender()
50 subrender_holder_.Remove<T>();
53 void ClearSubrenders()
55 subrender_holder_.Clear();
60 if (index >= render_stages_.size())
65 return render_stages_.at(index).get();
68 void AddRenderStage(std::unique_ptr<RenderStage>&& render_stage)
70 render_stages_.emplace_back(std::move(render_stage));
75 render_targets_.emplace_back(std::move(specification));
79 bool started_ =
false;
80 std::vector<RenderTargetSpecification> render_targets_;
81 std::vector<std::unique_ptr<RenderStage>> render_stages_;