More threadpool bs

This commit is contained in:
Dynamitos
2021-12-02 13:00:03 +01:00
parent 5fafdda770
commit 9e3a2446ce
37 changed files with 488 additions and 541 deletions
+9 -4
View File
@@ -9,6 +9,10 @@ InspectorView::InspectorView(Gfx::PGraphics graphics, PWindow window, const View
: View(graphics, window, createInfo, "InspectorView")
, uiPass(UIPass(graphics, viewport, new Gfx::SwapchainAttachment(window->getGfxHandle())))
{
PRenderGraphResources resources = new RenderGraphResources();
uiPass.setResources(resources);
uiPass.publishOutputs();
uiPass.createRenderPass();
}
InspectorView::~InspectorView()
@@ -34,13 +38,14 @@ void InspectorView::prepareRender()
}
Job InspectorView::render()
MainJob InspectorView::render()
{
co_await uiPass.beginFrame();
co_await uiPass.render();
co_await uiPass.endFrame();
uiPass.beginFrame();
uiPass.render();
uiPass.endFrame();
renderFinishedEvent.raise();
co_return;
}
void InspectorView::keyCallback(KeyCode, InputAction, KeyModifier)
+1 -1
View File
@@ -18,7 +18,7 @@ public:
virtual void commitUpdate() override;
virtual void prepareRender() override;
virtual Job render() override;
virtual MainJob render() override;
void selectActor();
protected:
UIPass uiPass;
+15 -15
View File
@@ -18,7 +18,7 @@ Seele::SceneView::SceneView(Gfx::PGraphics graphics, PWindow owner, const Viewpo
{
scene = new Scene(graphics);
scene->addActor(activeCamera);
AssetRegistry::importFile("/home/dynamitos/Assets/Ayaka/Avatar_Girl_Sword_Ayaka_Tex_Body_Diffuse.png");
/*AssetRegistry::importFile("/home/dynamitos/Assets/Ayaka/Avatar_Girl_Sword_Ayaka_Tex_Body_Diffuse.png");
AssetRegistry::importFile("/home/dynamitos/Assets/Ayaka/Avatar_Girl_Sword_Ayaka_Tex_Body_Lightmap.png");
AssetRegistry::importFile("/home/dynamitos/Assets/Ayaka/Avatar_Girl_Sword_Ayaka_Tex_Face_Diffuse.png");
AssetRegistry::importFile("/home/dynamitos/Assets/Ayaka/Avatar_Girl_Sword_Ayaka_Tex_Hair_Diffuse.png");
@@ -28,9 +28,9 @@ Seele::SceneView::SceneView(Gfx::PGraphics graphics, PWindow owner, const Viewpo
PPrimitiveComponent ayaka = new PrimitiveComponent(AssetRegistry::findMesh("Ayaka"));
ayaka->addWorldTranslation(Vector(0, 0, 0));
ayaka->setWorldScale(Vector(10, 10, 10));
scene->addPrimitiveComponent(ayaka);
scene->addPrimitiveComponent(ayaka);*/
/*AssetRegistry::importFile("D:\\Private\\Programming\\Unreal Engine\\Assets\\Ely\\Ely.fbx");
AssetRegistry::importFile("D:\\Private\\Programming\\Unreal Engine\\Assets\\Ely\\Ely.fbx");
AssetRegistry::importFile("D:\\Private\\Programming\\Unreal Engine\\Assets\\Cube\\cube.obj");
AssetRegistry::importFile("D:\\Private\\Programming\\Unreal Engine\\Assets\\Plane\\plane.fbx");
PPrimitiveComponent plane = new PrimitiveComponent(AssetRegistry::findMesh("plane"));
@@ -39,7 +39,7 @@ Seele::SceneView::SceneView(Gfx::PGraphics graphics, PWindow owner, const Viewpo
arissa->addWorldTranslation(Vector(0, 0, 100));
arissa->setWorldScale(Vector(0.1f, 0.1f, 0.1f));
scene->addPrimitiveComponent(plane);
scene->addPrimitiveComponent(arissa);*/
scene->addPrimitiveComponent(arissa);
PRenderGraphResources resources = new RenderGraphResources();
depthPrepass.setResources(resources);
@@ -61,7 +61,6 @@ Seele::SceneView::~SceneView()
void SceneView::beginUpdate()
{
View::beginUpdate();
scene->tick(Gfx::currentFrameDelta);
}
@@ -83,21 +82,22 @@ void SceneView::prepareRender()
basePass.updateViewFrame(basePassData);
}
Job SceneView::render()
MainJob SceneView::render()
{
co_await depthPrepass.beginFrame();
co_await lightCullingPass.beginFrame();
co_await basePass.beginFrame();
depthPrepass.beginFrame();
lightCullingPass.beginFrame();
basePass.beginFrame();
co_await depthPrepass.render();
co_await lightCullingPass.render();
co_await basePass.render();
depthPrepass.render();
lightCullingPass.render();
basePass.render();
co_await depthPrepass.endFrame();
co_await lightCullingPass.endFrame();
co_await basePass.endFrame();
depthPrepass.endFrame();
lightCullingPass.endFrame();
basePass.endFrame();
renderFinishedEvent.raise();
co_return;
}
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 Job render() override;
virtual MainJob render() override;
PScene getScene() const { return scene; }
private:
+6 -5
View File
@@ -13,18 +13,19 @@ public:
virtual ~View();
// These are called from the view thread, and handle updating game data
virtual void beginUpdate() {}
virtual void update() {}
virtual void beginUpdate() = 0;
virtual void update() = 0;
// End frame is called with a lock, so it is safe to write to shared memory
virtual void commitUpdate() {}
virtual void commitUpdate() = 0;
// These are called from the render thread
// prepare render is also locked, so reading from shared memory is also safe
virtual void prepareRender() {}
virtual Job render() { co_return; }
virtual void prepareRender() = 0;
virtual MainJob render() = 0;
void applyArea(URect area);
void setFocused();
Event renderFinished() { return renderFinishedEvent; }
void resetRender() { renderFinishedEvent.reset(); }
protected:
Gfx::PGraphics graphics;
+2 -2
View File
@@ -40,9 +40,9 @@ MainJob Window::render()
for(auto& windowView : views)
{
co_await windowView->view->renderFinished();
windowView->view->resetRender();
}
gfxHandle->endFrame();
//Enqueue a new render main job
render();
}
@@ -55,7 +55,7 @@ void Window::setFocused(PView view)
{
auto keyFunction = std::bind(&View::keyCallback, view.getHandle(), std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
auto mouseMoveFunction = std::bind(&View::mouseMoveCallback, view.getHandle(), std::placeholders::_1, std::placeholders::_2);
auto mouseButtonFunction = std::bind(&View::mouseButtonCallback, view.getHandle(), std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
auto mouseButtonFunction = std::bind(&View::mouseButtonCallback, view.getHandle() , std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
auto scrollFunction = std::bind(&View::scrollCallback, view.getHandle(), std::placeholders::_1, std::placeholders::_2);
auto fileFunction = std::bind(&View::fileCallback, view.getHandle(), std::placeholders::_1, std::placeholders::_2);
gfxHandle->setKeyCallback(keyFunction);