Async render passes

This commit is contained in:
2021-11-24 12:10:23 +01:00
parent 94be513538
commit 5fafdda770
23 changed files with 199 additions and 162 deletions
+11 -6
View File
@@ -34,31 +34,36 @@ void InspectorView::prepareRender()
}
void InspectorView::render()
Job InspectorView::render()
{
co_await uiPass.beginFrame();
co_await uiPass.render();
co_await uiPass.endFrame();
renderFinishedEvent.raise();
}
void InspectorView::keyCallback(KeyCode code, InputAction action, KeyModifier modifier)
void InspectorView::keyCallback(KeyCode, InputAction, KeyModifier)
{
}
void InspectorView::mouseMoveCallback(double xPos, double yPos)
void InspectorView::mouseMoveCallback(double, double)
{
}
void InspectorView::mouseButtonCallback(MouseButton button, InputAction action, KeyModifier modifier)
void InspectorView::mouseButtonCallback(MouseButton, InputAction, KeyModifier)
{
}
void InspectorView::scrollCallback(double xOffset, double yOffset)
void InspectorView::scrollCallback(double, double)
{
}
void InspectorView::fileCallback(int count, const char** paths)
void InspectorView::fileCallback(int, const char**)
{
}
+1 -1
View File
@@ -18,7 +18,7 @@ public:
virtual void commitUpdate() override;
virtual void prepareRender() override;
virtual void render() override;
virtual Job render() override;
void selectActor();
protected:
UIPass uiPass;
+12 -10
View File
@@ -83,19 +83,21 @@ void SceneView::prepareRender()
basePass.updateViewFrame(basePassData);
}
void SceneView::render()
Job SceneView::render()
{
depthPrepass.beginFrame();
lightCullingPass.beginFrame();
basePass.beginFrame();
co_await depthPrepass.beginFrame();
co_await lightCullingPass.beginFrame();
co_await basePass.beginFrame();
depthPrepass.render();
lightCullingPass.render();
basePass.render();
co_await depthPrepass.render();
co_await lightCullingPass.render();
co_await basePass.render();
depthPrepass.endFrame();
lightCullingPass.endFrame();
basePass.endFrame();
co_await depthPrepass.endFrame();
co_await lightCullingPass.endFrame();
co_await basePass.endFrame();
renderFinishedEvent.raise();
}
void SceneView::keyCallback(KeyCode code, InputAction action, KeyModifier)
+1 -1
View File
@@ -18,7 +18,7 @@ public:
virtual void commitUpdate() override;
virtual void prepareRender() override;
virtual void render() override;
virtual Job render() override;
PScene getScene() const { return scene; }
private:
+4 -1
View File
@@ -1,5 +1,6 @@
#pragma once
#include "Graphics/RenderPass/RenderGraph.h"
#include "ThreadPool.h"
namespace Seele
{
@@ -20,15 +21,17 @@ public:
// These are called from the render thread
// prepare render is also locked, so reading from shared memory is also safe
virtual void prepareRender() {}
virtual void render() {}
virtual Job render() { co_return; }
void applyArea(URect area);
void setFocused();
Event renderFinished() { return renderFinishedEvent; }
protected:
Gfx::PGraphics graphics;
Gfx::PViewport viewport;
PWindow owner;
std::string name;
Event renderFinishedEvent;
virtual void keyCallback(KeyCode code, InputAction action, KeyModifier modifier) = 0;
virtual void mouseMoveCallback(double xPos, double yPos) = 0;
+4
View File
@@ -37,6 +37,10 @@ MainJob Window::render()
}
windowView->view->render();
}
for(auto& windowView : views)
{
co_await windowView->view->renderFinished();
}
gfxHandle->endFrame();
//Enqueue a new render main job
render();