2021-05-06 17:02:10 +02:00
|
|
|
#pragma once
|
2024-06-15 21:47:20 +02:00
|
|
|
#include "RenderGraphResources.h"
|
2022-11-17 16:47:42 +01:00
|
|
|
#include "RenderPass.h"
|
2021-05-06 17:02:10 +02:00
|
|
|
|
2024-06-09 12:20:04 +02:00
|
|
|
namespace Seele {
|
|
|
|
|
class RenderGraph {
|
|
|
|
|
public:
|
|
|
|
|
RenderGraph() { res = new RenderGraphResources(); }
|
|
|
|
|
void addPass(ORenderPass pass) {
|
2024-04-05 10:41:59 +02:00
|
|
|
pass->setResources(res);
|
2024-06-09 12:20:04 +02:00
|
|
|
passes.add(std::move(pass));
|
2022-11-17 16:47:42 +01:00
|
|
|
}
|
2024-06-09 12:20:04 +02:00
|
|
|
void setViewport(Gfx::PViewport viewport) {
|
|
|
|
|
for (auto& pass : passes) {
|
2024-04-05 10:41:59 +02:00
|
|
|
pass->setViewport(viewport);
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-06-09 12:20:04 +02:00
|
|
|
void createRenderPass() {
|
|
|
|
|
for (auto& pass : passes) {
|
2024-04-05 10:41:59 +02:00
|
|
|
pass->publishOutputs();
|
|
|
|
|
}
|
2024-06-09 12:20:04 +02:00
|
|
|
for (auto& pass : passes) {
|
2024-04-05 10:41:59 +02:00
|
|
|
pass->createRenderPass();
|
|
|
|
|
}
|
2022-11-17 16:47:42 +01:00
|
|
|
}
|
2024-06-09 12:20:04 +02:00
|
|
|
void render(const Component::Camera& cam) {
|
|
|
|
|
for (auto& pass : passes) {
|
2024-04-05 10:41:59 +02:00
|
|
|
pass->beginFrame(cam);
|
|
|
|
|
}
|
2024-06-09 12:20:04 +02:00
|
|
|
for (auto& pass : passes) {
|
2024-04-05 10:41:59 +02:00
|
|
|
pass->render();
|
|
|
|
|
}
|
2024-06-09 12:20:04 +02:00
|
|
|
for (auto& pass : passes) {
|
2024-04-05 10:41:59 +02:00
|
|
|
pass->endFrame();
|
|
|
|
|
}
|
2022-11-17 16:47:42 +01:00
|
|
|
}
|
2024-06-15 21:47:20 +02:00
|
|
|
PRenderGraphResources getResources() {
|
|
|
|
|
return res;
|
|
|
|
|
}
|
2024-06-09 12:20:04 +02:00
|
|
|
private:
|
2024-04-05 10:41:59 +02:00
|
|
|
PRenderGraphResources res;
|
|
|
|
|
List<ORenderPass> passes;
|
2022-11-17 16:47:42 +01:00
|
|
|
};
|
|
|
|
|
|
2021-05-06 17:02:10 +02:00
|
|
|
} // namespace Seele
|