diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/manual/deferred-renderer-cpp/deferredrenderer.cpp | 34 | ||||
-rw-r--r-- | tests/manual/deferred-renderer-cpp/deferredrenderer.h | 5 |
2 files changed, 31 insertions, 8 deletions
diff --git a/tests/manual/deferred-renderer-cpp/deferredrenderer.cpp b/tests/manual/deferred-renderer-cpp/deferredrenderer.cpp index fe0c168e4..48f8ad3fe 100644 --- a/tests/manual/deferred-renderer-cpp/deferredrenderer.cpp +++ b/tests/manual/deferred-renderer-cpp/deferredrenderer.cpp @@ -64,7 +64,9 @@ DeferredRenderer::DeferredRenderer(Qt3DCore::QNode *parent) , m_geometryPassFilter(new Qt3DRender::QRenderPassFilter(m_clearGBuffer)) , m_finalPassFilter(new Qt3DRender::QRenderPassFilter(m_clearScreenQuad)) , m_sceneCameraSelector(new Qt3DRender::QCameraSelector(m_geometryPassFilter)) + , m_winSize(new Qt3DRender::QParameter(QStringLiteral("winSize"), QSizeF(1024.0f, 768.0f))) , m_gBuffer(new GBuffer(this)) + , m_window(nullptr) { m_clearGBuffer->setBuffers(Qt3DRender::QClearBuffers::ColorDepthBuffer); m_clearScreenQuad->setBuffers(Qt3DRender::QClearBuffers::ColorDepthBuffer); @@ -73,13 +75,7 @@ DeferredRenderer::DeferredRenderer(Qt3DCore::QNode *parent) m_finalPassFilter->addParameter(new Qt3DRender::QParameter(QStringLiteral("position"), m_gBuffer->positionTexture())); m_finalPassFilter->addParameter(new Qt3DRender::QParameter(QStringLiteral("normal"), m_gBuffer->normalTexture())); m_finalPassFilter->addParameter(new Qt3DRender::QParameter(QStringLiteral("color"), m_gBuffer->colorTexture())); - - Qt3DRender::QParameter *winSize = new Qt3DRender::QParameter(QStringLiteral("winSize"), QSizeF(1024.0f, 768.0f)); - QObject::connect(m_surfaceSelector, &Qt3DRender::QRenderSurfaceSelector::externalRenderTargetSizeChanged, - [=] (const QSize &viewSize) { - winSize->setValue(QSizeF(viewSize)); - }); - m_finalPassFilter->addParameter(winSize); + m_finalPassFilter->addParameter(m_winSize); } void DeferredRenderer::setSceneCamera(Qt3DCore::QEntity *camera) @@ -111,5 +107,27 @@ void DeferredRenderer::setScreenQuadLayer(Qt3DRender::QLayer *layer) void DeferredRenderer::setSurface(QWindow *surface) { - m_surfaceSelector->setSurface(surface); + if (surface != m_window) { + + // Disconnect old window's signals + if (m_window != nullptr) { + QObject::disconnect(m_widthChangedConnection); + QObject::disconnect(m_heightChangedConnection); + } + + m_window = surface; + m_surfaceSelector->setSurface(surface); + + if (m_window != nullptr) { + // Store connections + m_widthChangedConnection = QObject::connect(surface, &QWindow::widthChanged, + [this] (int width) { + m_winSize->setValue(QSizeF(float(width), m_winSize->value().toSizeF().height())); + }); + m_heightChangedConnection = QObject::connect(surface, &QWindow::heightChanged, + [this] (int height) { + m_winSize->setValue(QSizeF(m_winSize->value().toSizeF().width(), float(height))); + }); + } + } } diff --git a/tests/manual/deferred-renderer-cpp/deferredrenderer.h b/tests/manual/deferred-renderer-cpp/deferredrenderer.h index 4483afb07..0d22c1e81 100644 --- a/tests/manual/deferred-renderer-cpp/deferredrenderer.h +++ b/tests/manual/deferred-renderer-cpp/deferredrenderer.h @@ -85,7 +85,12 @@ private: Qt3DRender::QRenderPassFilter *m_geometryPassFilter; Qt3DRender::QRenderPassFilter *m_finalPassFilter; Qt3DRender::QCameraSelector *m_sceneCameraSelector; + Qt3DRender::QParameter *m_winSize; GBuffer *m_gBuffer; + QWindow *m_window; + + QMetaObject::Connection m_widthChangedConnection; + QMetaObject::Connection m_heightChangedConnection; }; #endif // DEFERREDRENDERER_H |