Restructuring renderpasses
This commit is contained in:
@@ -1,54 +1,51 @@
|
||||
#include "Window.h"
|
||||
#include <functional>
|
||||
|
||||
Seele::Window::Window(Gfx::PWindow handle)
|
||||
using namespace Seele;
|
||||
|
||||
Window::Window(Gfx::PWindow handle)
|
||||
: gfxHandle(handle)
|
||||
{
|
||||
}
|
||||
|
||||
Seele::Window::~Window()
|
||||
Window::~Window()
|
||||
{
|
||||
}
|
||||
|
||||
void Seele::Window::addView(PView view)
|
||||
void Window::addView(PView view)
|
||||
{
|
||||
viewports.add(view);
|
||||
WindowView* windowView = new WindowView();
|
||||
windowView->view = view;
|
||||
windowView->renderGraph = view->renderGraph;
|
||||
windowView->worker = std::thread(&Window::viewWorker, this, windowView);
|
||||
views.add(windowView);
|
||||
}
|
||||
|
||||
void Seele::Window::beginFrame()
|
||||
void Window::render()
|
||||
{
|
||||
gfxHandle->beginFrame();
|
||||
for (auto view : viewports)
|
||||
for(auto& windowView : views)
|
||||
{
|
||||
view->beginFrame();
|
||||
UPViewFrame frame;
|
||||
{
|
||||
std::lock_guard lock(windowView->workerMutex);
|
||||
frame = std::move(windowView->currentFrame);
|
||||
}
|
||||
if(frame != nullptr)
|
||||
{
|
||||
windowView->renderGraph->render(std::move(frame));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Seele::Window::render()
|
||||
{
|
||||
for (auto view : viewports)
|
||||
{
|
||||
view->render();
|
||||
}
|
||||
}
|
||||
|
||||
void Seele::Window::endFrame()
|
||||
{
|
||||
gfxHandle->endFrame();
|
||||
for (auto view : viewports)
|
||||
{
|
||||
view->endFrame();
|
||||
}
|
||||
}
|
||||
|
||||
Gfx::PWindow Seele::Window::getGfxHandle()
|
||||
Gfx::PWindow Window::getGfxHandle()
|
||||
{
|
||||
return gfxHandle;
|
||||
}
|
||||
|
||||
void Window::setFocused(PView view)
|
||||
{
|
||||
focusedView = 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);
|
||||
@@ -60,3 +57,16 @@ void Window::setFocused(PView view)
|
||||
gfxHandle->setScrollCallback(scrollFunction);
|
||||
gfxHandle->setFileCallback(fileFunction);
|
||||
}
|
||||
|
||||
|
||||
void Window::viewWorker(WindowView* windowView)
|
||||
{
|
||||
while(true)
|
||||
{
|
||||
windowView->view->beginFrame();
|
||||
windowView->view->render();
|
||||
windowView->view->endFrame();
|
||||
std::lock_guard lock(windowView->workerMutex);
|
||||
windowView->currentFrame = std::move(windowView->view->currentFrame);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user