Archived
1
Fork 0

Properly destroy viewport render target

This commit is contained in:
Joshua Goins 2018-12-25 07:26:36 -05:00
parent 7e2381a211
commit 291001d7e1
2 changed files with 8 additions and 7 deletions

View file

@ -11,7 +11,6 @@ class RendererWindow : public QWindow {
Q_OBJECT
public:
RendererWindow(Context& context);
~RendererWindow();
protected:
void exposeEvent(QExposeEvent* event) override;

View file

@ -10,10 +10,6 @@ RendererWindow::RendererWindow(Context& context) : QWindow(), context(context) {
setSurfaceType(SurfaceType::VulkanSurface);
}
RendererWindow::~RendererWindow() {
}
void RendererWindow::exposeEvent(QExposeEvent*) {
if (isExposed() && !initialized) {
init();
@ -28,6 +24,12 @@ bool RendererWindow::event(QEvent* event) {
case QEvent::UpdateRequest:
render();
break;
case QEvent::PlatformSurface:
{
if(static_cast<QPlatformSurfaceEvent*>(event)->surfaceEventType() == QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed)
context.renderer->destroyRenderTarget(target);
}
break;
default:
break;
}
@ -42,14 +44,14 @@ void RendererWindow::init() {
}
void RendererWindow::render() {
context.renderer->render(*worldManager.getCurrentWorld(), target);
const auto width = size().width();
const auto height = size().height();
if(target->extent.width != width || target->extent.height != height)
target = context.renderer->createSurfaceRenderTarget(surface, target);
context.renderer->render(*worldManager.getCurrentWorld(), target);
vulkanInstance()->presentQueued(this);
requestUpdate();
}