diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2016-08-05 11:04:12 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-08-07 18:49:09 +0000 |
commit | e2b9d0b15cc3ad0072cb3e404e3079e640e555cc (patch) | |
tree | 8df9380b5a751015bd897fe9dd1cedb05fbcf707 /src/render/framegraph/qrendersurfaceselector.cpp | |
parent | 5dc4c77408ff040dc4a50c3837f4b2a29e927cb8 (diff) |
Convenience to locate QRenderSurfaceSelector
This is in fact done at several places nowadays, sometimes with bugs, so
let's provide a single tested implementation for it.
Change-Id: I782ba18a15e5b4a3b320ac6b472173b1f8e417a3
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/framegraph/qrendersurfaceselector.cpp')
-rw-r--r-- | src/render/framegraph/qrendersurfaceselector.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/render/framegraph/qrendersurfaceselector.cpp b/src/render/framegraph/qrendersurfaceselector.cpp index 349ceb827..e76963e72 100644 --- a/src/render/framegraph/qrendersurfaceselector.cpp +++ b/src/render/framegraph/qrendersurfaceselector.cpp @@ -43,7 +43,9 @@ #include <QtGui/QWindow> #include <QtGui/QScreen> #include <QtGui/QOffscreenSurface> +#include <Qt3DCore/qentity.h> #include <Qt3DCore/qpropertyupdatedchange.h> +#include <Qt3DRender/qrendersettings.h> QT_BEGIN_NAMESPACE @@ -104,6 +106,30 @@ QRenderSurfaceSelectorPrivate::~QRenderSurfaceSelectorPrivate() QObject::disconnect(m_screenConn); } +QRenderSurfaceSelector *QRenderSurfaceSelectorPrivate::find(QObject *rootObject) +{ + auto rendererSettings = rootObject->findChild<Qt3DRender::QRenderSettings *>(); + if (!rendererSettings) { + qWarning() << "No renderer settings component found"; + return nullptr; + } + + auto frameGraphRoot = rendererSettings->activeFrameGraph(); + if (!frameGraphRoot) { + qWarning() << "No active frame graph found"; + return nullptr; + } + + auto surfaceSelector = qobject_cast<Qt3DRender::QRenderSurfaceSelector *>(frameGraphRoot); + if (!surfaceSelector) + surfaceSelector = frameGraphRoot->findChild<Qt3DRender::QRenderSurfaceSelector *>(); + + if (!surfaceSelector) + qWarning() << "No render surface selector found in frame graph"; + + return surfaceSelector; +} + void QRenderSurfaceSelectorPrivate::setExternalRenderTargetSize(const QSize &size) { m_externalRenderTargetSize = size; |