#include "renderwindow.h" #include #include #include "renderer.h" #include "worldmanager.h" RendererWindow::RendererWindow(Context& context) : QWindow(), context(context) { setSurfaceType(SurfaceType::VulkanSurface); } RendererWindow::~RendererWindow() { } void RendererWindow::exposeEvent(QExposeEvent*) { if (isExposed() && !initialized) { init(); render(); initialized = true; } } bool RendererWindow::event(QEvent* event) { switch(event->type()) { case QEvent::UpdateRequest: render(); break; default: break; } return QWindow::event(event); } void RendererWindow::init() { surface = QVulkanInstance::surfaceForWindow(this); target = context.renderer->createSurfaceRenderTarget(surface); } 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); vulkanInstance()->presentQueued(this); requestUpdate(); }