Properly destroy viewport render target
This commit is contained in:
parent
7e2381a211
commit
291001d7e1
2 changed files with 8 additions and 7 deletions
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue