diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2016-08-08 09:19:54 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-08-10 19:45:06 +0000 |
commit | d220a4cfe578e908ad89f8d5d85e6601acade355 (patch) | |
tree | 4370a6260ce26abbbb635ed81abedd4c56f8f402 /tests | |
parent | 14f122158768e1d14b6c4e488f814217f21b6fd8 (diff) |
deferred-renderer-cpp: properly handle window size changes
Change-Id: I8e89a6c0adc2b99e5fe2af61629df2f2a6ae3ccd
Task-number: QTBUG-55163
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
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 |