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 Q_OBJECT
public: public:
RendererWindow(Context& context); RendererWindow(Context& context);
~RendererWindow();
protected: protected:
void exposeEvent(QExposeEvent* event) override; void exposeEvent(QExposeEvent* event) override;

View file

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