diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-09-17 13:32:23 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-09-20 14:25:44 +0200 |
commit | ccc9b1f7c687510950a1c4d0e78bf9a6d5a23fc0 (patch) | |
tree | fab7e16a25caec10eb7873dbbe3d79cbd2e17c7c /src/render/framegraph | |
parent | fa3eab91e157bab5b9662660eb31c75fa53141f6 (diff) |
Update QRenderSurfaceSelector to use direct sync
Change-Id: If25ab47391561e100a5a8a662503b802d5fdf216
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/render/framegraph')
-rw-r--r-- | src/render/framegraph/qrendersurfaceselector.cpp | 18 | ||||
-rw-r--r-- | src/render/framegraph/rendersurfaceselector.cpp | 59 | ||||
-rw-r--r-- | src/render/framegraph/rendersurfaceselector_p.h | 5 |
3 files changed, 32 insertions, 50 deletions
diff --git a/src/render/framegraph/qrendersurfaceselector.cpp b/src/render/framegraph/qrendersurfaceselector.cpp index 848d86f53..765aa1824 100644 --- a/src/render/framegraph/qrendersurfaceselector.cpp +++ b/src/render/framegraph/qrendersurfaceselector.cpp @@ -253,24 +253,10 @@ void QRenderSurfaceSelector::setSurface(QObject *surfaceObject) if (window) { d->m_widthConn = QObject::connect(window, &QWindow::widthChanged, [=] (int width) { - if (d->m_changeArbiter != nullptr) { - Qt3DCore::QPropertyUpdatedChangePtr change( - new Qt3DCore::QPropertyUpdatedChange(id())); - - change->setPropertyName("width"); - change->setValue(QVariant::fromValue(width)); - d->notifyObservers(change); - } + d->update(); }); d->m_heightConn = QObject::connect(window, &QWindow::heightChanged, [=] (int height) { - if (d->m_changeArbiter != nullptr) { - Qt3DCore::QPropertyUpdatedChangePtr change( - new Qt3DCore::QPropertyUpdatedChange(id())); - - change->setPropertyName("height"); - change->setValue(QVariant::fromValue(height)); - d->notifyObservers(change); - } + d->update(); }); d->m_screenConn = QObject::connect(window, &QWindow::screenChanged, [=] (QScreen *screen) { if (screen && surfacePixelRatio() != screen->devicePixelRatio()) diff --git a/src/render/framegraph/rendersurfaceselector.cpp b/src/render/framegraph/rendersurfaceselector.cpp index 16a1199b5..173da77d6 100644 --- a/src/render/framegraph/rendersurfaceselector.cpp +++ b/src/render/framegraph/rendersurfaceselector.cpp @@ -73,6 +73,7 @@ namespace Render { RenderSurfaceSelector::RenderSurfaceSelector() : FrameGraphNode(FrameGraphNode::Surface) + , m_surfaceObj(nullptr) , m_surface(nullptr) , m_width(0) , m_height(0) @@ -80,45 +81,41 @@ RenderSurfaceSelector::RenderSurfaceSelector() { } -void RenderSurfaceSelector::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) +void RenderSurfaceSelector::syncFromFrontEnd(const QNode *frontEnd, bool firstTime) { - FrameGraphNode::initializeFromPeer(change); - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QRenderSurfaceSelectorData>>(change); - const auto &data = typedChange->data; - m_surface = surfaceFromQObject(data.surface); - m_renderTargetSize = data.externalRenderTargetSize; - m_devicePixelRatio = data.surfacePixelRatio; + const QRenderSurfaceSelector *node = qobject_cast<const QRenderSurfaceSelector *>(frontEnd); + if (!node) + return; - if (m_surface && m_surface->surfaceClass() == QSurface::Window) { - QWindow *window = static_cast<QWindow *>(m_surface); - m_width = window->width(); - m_height = window->height(); + FrameGraphNode::syncFromFrontEnd(frontEnd, firstTime); + + if (node->surface() != m_surfaceObj) { + m_surfaceObj = node->surface(); + m_surface = surfaceFromQObject(m_surfaceObj); + markDirty(AbstractRenderer::FrameGraphDirty); } -} -void RenderSurfaceSelector::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) -{ - qCDebug(Render::Framegraph) << Q_FUNC_INFO; - if (e->type() == PropertyUpdated) { - QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<QPropertyUpdatedChange>(e); - if (propertyChange->propertyName() == QByteArrayLiteral("surface")) { - m_surface = surfaceFromQObject(propertyChange->value().value<QObject *>()); - markDirty(AbstractRenderer::FrameGraphDirty); - } else if (propertyChange->propertyName() == QByteArrayLiteral("externalRenderTargetSize")) { - setRenderTargetSize(propertyChange->value().toSize()); - markDirty(AbstractRenderer::FrameGraphDirty); - } else if (propertyChange->propertyName() == QByteArrayLiteral("width")) { - m_width = propertyChange->value().toInt(); - markDirty(AbstractRenderer::FrameGraphDirty); - } else if (propertyChange->propertyName() == QByteArrayLiteral("height")) { - m_height = propertyChange->value().toInt(); + if (m_surface && m_surface->surfaceClass() == QSurface::Window) { + QWindow *window = static_cast<QWindow *>(m_surface); + if (window->width() != m_width) { + m_width = window->width(); markDirty(AbstractRenderer::FrameGraphDirty); - } else if (propertyChange->propertyName() == QByteArrayLiteral("surfacePixelRatio")) { - m_devicePixelRatio = propertyChange->value().toFloat(); + } + if (window->height() != m_height) { + m_height = window->height(); markDirty(AbstractRenderer::FrameGraphDirty); } } - FrameGraphNode::sceneChangeEvent(e); + + if (node->externalRenderTargetSize() != m_renderTargetSize) { + m_renderTargetSize = node->externalRenderTargetSize(); + markDirty(AbstractRenderer::FrameGraphDirty); + } + + if (node->surfacePixelRatio() != m_devicePixelRatio) { + m_devicePixelRatio = node->surfacePixelRatio(); + markDirty(AbstractRenderer::FrameGraphDirty); + } } QSize RenderSurfaceSelector::renderTargetSize() const diff --git a/src/render/framegraph/rendersurfaceselector_p.h b/src/render/framegraph/rendersurfaceselector_p.h index 74863aa36..f1a139e84 100644 --- a/src/render/framegraph/rendersurfaceselector_p.h +++ b/src/render/framegraph/rendersurfaceselector_p.h @@ -68,7 +68,7 @@ public: QSize renderTargetSize() const; void setRenderTargetSize(const QSize &size) { m_renderTargetSize = size; } - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; QSurface *surface() const { return m_surface; } inline int width() const Q_DECL_NOTHROW { return m_width; } @@ -76,8 +76,7 @@ public: inline float devicePixelRatio() const Q_DECL_NOTHROW { return m_devicePixelRatio; } private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; - + QObject *m_surfaceObj; QSurface *m_surface; QSize m_renderTargetSize; int m_width; |