summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2016-08-08 09:19:54 +0200
committerSean Harmer <sean.harmer@kdab.com>2016-08-10 19:45:06 +0000
commitd220a4cfe578e908ad89f8d5d85e6601acade355 (patch)
tree4370a6260ce26abbbb635ed81abedd4c56f8f402 /tests
parent14f122158768e1d14b6c4e488f814217f21b6fd8 (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.cpp34
-rw-r--r--tests/manual/deferred-renderer-cpp/deferredrenderer.h5
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