Window resizing works
This commit is contained in:
@@ -72,6 +72,14 @@ void GameView::render()
|
||||
renderGraph.render(cam);
|
||||
}
|
||||
|
||||
void GameView::applyArea(URect rect)
|
||||
{
|
||||
viewport = graphics->createViewport(owner->getGfxHandle(), ViewportCreateInfo{
|
||||
.dimensions = rect,
|
||||
});
|
||||
renderGraph.updateViewport(viewport);
|
||||
}
|
||||
|
||||
void GameView::reloadGame()
|
||||
{
|
||||
gameInterface.reload(AssetRegistry::getInstance());
|
||||
|
||||
@@ -25,6 +25,7 @@ public:
|
||||
|
||||
virtual void prepareRender() override;
|
||||
virtual void render() override;
|
||||
virtual void applyArea(URect rect) override;
|
||||
|
||||
void reloadGame();
|
||||
private:
|
||||
|
||||
@@ -18,11 +18,6 @@ View::~View()
|
||||
{
|
||||
}
|
||||
|
||||
void View::applyArea(URect)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void View::setFocused()
|
||||
{
|
||||
owner->setFocused(this);
|
||||
|
||||
@@ -11,17 +11,13 @@ public:
|
||||
View(Gfx::PGraphics graphics, PWindow window, const ViewportCreateInfo &createInfo, std::string name);
|
||||
virtual ~View();
|
||||
|
||||
// These are called from the view thread, and handle updating game data
|
||||
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() = 0;
|
||||
|
||||
// These are called from the render thread
|
||||
// prepare render is also locked, so reading from shared memory is also safe
|
||||
virtual void prepareRender() = 0;
|
||||
virtual void render() = 0;
|
||||
void applyArea(URect area);
|
||||
virtual void applyArea(URect area) = 0;
|
||||
void setFocused();
|
||||
|
||||
const std::string& getName();
|
||||
|
||||
@@ -8,6 +8,7 @@ Window::Window(PWindowManager owner, Gfx::OWindow handle)
|
||||
: owner(owner)
|
||||
, gfxHandle(std::move(handle))
|
||||
{
|
||||
gfxHandle->setResizeCallback([this](uint32 w, uint32 h) {onResize(w, h); });
|
||||
}
|
||||
|
||||
Window::~Window()
|
||||
@@ -57,3 +58,15 @@ void Window::setFocused(PView view)
|
||||
owner->notifyWindowClosed(this);
|
||||
});
|
||||
}
|
||||
|
||||
void Window::onResize(uint32 width, uint32 height)
|
||||
{
|
||||
for (auto& view : views)
|
||||
{
|
||||
// TODO: some sort of layouting algorithm should do this
|
||||
view->applyArea(URect{
|
||||
.size = UVector2(width, height),
|
||||
.offset = UVector2(0, 0),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,13 +15,11 @@ public:
|
||||
void render();
|
||||
Gfx::PWindow getGfxHandle();
|
||||
void setFocused(PView view);
|
||||
|
||||
void onResize(uint32 width, uint32 height);
|
||||
protected:
|
||||
PWindowManager owner;
|
||||
Array<PView> views;
|
||||
Gfx::OWindow gfxHandle;
|
||||
|
||||
//void viewWorker(size_t viewIndex);
|
||||
};
|
||||
DEFINE_REF(Window)
|
||||
} // namespace Seele
|
||||
Reference in New Issue
Block a user