summaryrefslogtreecommitdiffstats
path: root/src/render/framegraph/qrendersurfaceselector.cpp
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2016-08-05 11:04:12 +0200
committerSean Harmer <sean.harmer@kdab.com>2016-08-07 18:49:09 +0000
commite2b9d0b15cc3ad0072cb3e404e3079e640e555cc (patch)
tree8df9380b5a751015bd897fe9dd1cedb05fbcf707 /src/render/framegraph/qrendersurfaceselector.cpp
parent5dc4c77408ff040dc4a50c3837f4b2a29e927cb8 (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.cpp26
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;