Trying new meshlet gen approach

This commit is contained in:
Dynamitos
2024-04-05 10:41:59 +02:00
parent 7eedaf61ba
commit 505e7d6547
19 changed files with 219 additions and 216 deletions
+37 -76
View File
@@ -3,93 +3,54 @@
namespace Seele
{
template<typename... RenderPasses>
class RenderGraph;
template<>
class RenderGraph<>
class RenderGraph
{
public:
RenderGraph(PRenderGraphResources) {}
void updatePassData() {}
protected:
void setViewport(Gfx::PViewport) {}
void createRenderPass() {}
void beginFrame(const Component::Camera&) {}
void render() {}
void endFrame() {}
};
template<typename This, typename... Rest>
class RenderGraph<This, Rest...> : private RenderGraph<Rest...>
{
public:
RenderGraph(PRenderGraphResources resources, This pass, Rest... rest)
: RenderGraph<Rest...>(resources, std::move(rest)...)
, resources(resources)
, rp(std::move(pass))
RenderGraph()
{
rp.setResources(resources);
res = new RenderGraphResources();
}
template<typename PassData, typename... OtherData>
void updatePassData(PassData passData, OtherData... otherData)
{
rp.updateViewFrame(std::move(passData));
RenderGraph<Rest...>::updatePassData(otherData...);
void addPass(ORenderPass pass)
{
pass->setResources(res);
passes.add(std::move(pass));
}
void updateViewport(Gfx::PViewport viewport)
void setViewport(Gfx::PViewport viewport)
{
setViewport(viewport);
createRenderPass();
for (auto& pass : passes)
{
pass->setViewport(viewport);
}
}
void createRenderPass()
{
for (auto& pass : passes)
{
pass->publishOutputs();
}
for (auto& pass : passes)
{
pass->createRenderPass();
}
}
void render(const Component::Camera& cam)
{
beginFrame(cam);
render();
endFrame();
}
protected:
void setViewport(Gfx::PViewport viewport)
{
rp.setViewport(viewport);
RenderGraph<Rest...>::setViewport(viewport);
}
void createRenderPass()
{
rp.createRenderPass();
RenderGraph<Rest...>::createRenderPass();
}
void beginFrame(const Component::Camera& cam)
{
rp.beginFrame(cam);
RenderGraph<Rest...>::beginFrame(cam);
}
void render()
{
rp.render();
RenderGraph<Rest...>::render();
}
void endFrame()
{
rp.endFrame();
RenderGraph<Rest...>::endFrame();
for (auto& pass : passes)
{
pass->beginFrame(cam);
}
for (auto& pass : passes)
{
pass->render();
}
for (auto& pass : passes)
{
pass->endFrame();
}
}
private:
PRenderGraphResources resources;
This rp;
};
class RenderGraphBuilder
{
public:
template<typename... RenderPasses>
static RenderGraph<RenderPasses...> build(RenderPasses... renderPasses)
{
PRenderGraphResources resources = new RenderGraphResources();
return RenderGraph<RenderPasses...>(resources, std::move(renderPasses)...);
}
private:
RenderGraphBuilder() = delete;
PRenderGraphResources res;
List<ORenderPass> passes;
};
} // namespace Seele