Brenta Engine 1.2
Loading...
Searching...
No Matches
pipeline.hpp
1// SPDX-License-Identifier: MIT
2// Author: Giovanni Santini
3// Mail: giovanni.santini@proton.me
4// Github: @San7o
5
6#pragma once
7
8#include <brenta/renderer/renderer.hpp>
9
10#include <tenno/vector.hpp>
11#include <tenno/memory.hpp>
12
13#include <optional>
14
15namespace brenta
16{
17
18// Virtual render pass class
20{
21public:
22
23 virtual ~RenderPass() = default;
24
25 // Bind a framebuffer
26 virtual void begin() = 0;
27 virtual void end() = 0;
28
29 // Draw to the framebuffer
30 virtual void execute(const Renderer::RenderData& data) = 0;
31
32};
33
34//
35// Render Pipeline
36// ---------------
37//
38// A pipeline is a series of passes in order. Each pass has a
39// reference to all data, and it draws to its framebuffer.
41{
42public:
43
44 tenno::vector<tenno::shared_ptr<RenderPass>> passes;
45
46 RenderPipeline() = default;
47
48 void add_pass(tenno::shared_ptr<RenderPass> pass);
49 template<typename P, typename ...Args>
50 void add_pass(Args... args)
51 {
52 passes.push_back(tenno::make_shared<P>(args...));
53 }
54
55 void execute(const Renderer::RenderData& data);
56
57 // Get a standard pipeline that draws to the default framebuffer.
58 static tenno::shared_ptr<RenderPipeline> create_default();
59
60};
61
62} // namespace brenta