Archived
1
Fork 0
This repository has been archived on 2025-04-12. You can view files and clone it, but cannot push or open issues or pull requests.
graph/tools/common/src/renderwindow.cpp

61 lines
1.6 KiB
C++
Executable file

#include "renderwindow.h"
#include <QVulkanInstance>
#include <QResizeEvent>
#include "renderer.h"
#include "worldmanager.h"
RendererWindow::RendererWindow(Context& context) : QWindow(), context(context) {
setSurfaceType(SurfaceType::VulkanSurface);
}
void RendererWindow::exposeEvent(QExposeEvent*) {
if (isExposed() && !initialized) {
init();
render();
initialized = true;
}
}
bool RendererWindow::event(QEvent* event) {
switch(event->type()) {
case QEvent::UpdateRequest:
render();
break;
case QEvent::PlatformSurface:
{
if(static_cast<QPlatformSurfaceEvent*>(event)->surfaceEventType() == QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed)
context.renderer->destroyRenderTarget(target);
}
break;
default:
break;
}
return QWindow::event(event);
}
void RendererWindow::init() {
surface = QVulkanInstance::surfaceForWindow(this);
target = context.renderer->createSurfaceRenderTarget(surface);
}
void RendererWindow::render() {
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);
RenderExtraInfo extraInfo;
extraInfo.selectedEntities = context.selectedEntities.data();
extraInfo.numSelectedEntities = context.selectedEntities.size();
context.renderer->render(*worldManager.getCurrentWorld(), target, &extraInfo);
vulkanInstance()->presentQueued(this);
requestUpdate();
}