summaryrefslogtreecommitdiffstats
path: root/src/render
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
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')
-rw-r--r--src/render/framegraph/qrendersurfaceselector.cpp26
-rw-r--r--src/render/framegraph/qrendersurfaceselector_p.h8
2 files changed, 33 insertions, 1 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;
diff --git a/src/render/framegraph/qrendersurfaceselector_p.h b/src/render/framegraph/qrendersurfaceselector_p.h
index d21bf744c..899387b98 100644
--- a/src/render/framegraph/qrendersurfaceselector_p.h
+++ b/src/render/framegraph/qrendersurfaceselector_p.h
@@ -53,6 +53,7 @@
#include <Qt3DRender/private/qframegraphnode_p.h>
#include <Qt3DRender/private/platformsurfacefilter_p.h>
+#include <Qt3DRender/private/qt3drender_global_p.h>
#include <QtGui/qsurface.h>
#include <QtGui/qwindow.h>
#include <QtCore/qpointer.h>
@@ -61,12 +62,17 @@ QT_BEGIN_NAMESPACE
namespace Qt3DRender {
-class QRenderSurfaceSelectorPrivate : public Qt3DRender::QFrameGraphNodePrivate
+class QRenderSurfaceSelector;
+
+class QT3DRENDERSHARED_PRIVATE_EXPORT QRenderSurfaceSelectorPrivate : public Qt3DRender::QFrameGraphNodePrivate
{
public:
QRenderSurfaceSelectorPrivate();
~QRenderSurfaceSelectorPrivate();
+ // TODO: Qt 5.8, make it public
+ static QRenderSurfaceSelector *find(QObject *rootObject);
+
void setExternalRenderTargetSize(const QSize &size);
QSize externalRenderTargetSize() const { return m_externalRenderTargetSize; }