From e2b9d0b15cc3ad0072cb3e404e3079e640e555cc Mon Sep 17 00:00:00 2001 From: Kevin Ottens Date: Fri, 5 Aug 2016 11:04:12 +0200 Subject: 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 --- src/render/framegraph/qrendersurfaceselector.cpp | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/render/framegraph/qrendersurfaceselector.cpp') 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 #include #include +#include #include +#include QT_BEGIN_NAMESPACE @@ -104,6 +106,30 @@ QRenderSurfaceSelectorPrivate::~QRenderSurfaceSelectorPrivate() QObject::disconnect(m_screenConn); } +QRenderSurfaceSelector *QRenderSurfaceSelectorPrivate::find(QObject *rootObject) +{ + auto rendererSettings = rootObject->findChild(); + 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(frameGraphRoot); + if (!surfaceSelector) + surfaceSelector = frameGraphRoot->findChild(); + + if (!surfaceSelector) + qWarning() << "No render surface selector found in frame graph"; + + return surfaceSelector; +} + void QRenderSurfaceSelectorPrivate::setExternalRenderTargetSize(const QSize &size) { m_externalRenderTargetSize = size; -- cgit v1.2.3