summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/render/framegraph/qrendersurfaceselector.cpp26
-rw-r--r--src/render/framegraph/qrendersurfaceselector_p.h8
-rw-r--r--tests/auto/render/qrendersurfaceselector/qrendersurfaceselector.pro10
-rw-r--r--tests/auto/render/qrendersurfaceselector/tst_qrendersurfaceselector.cpp107
-rw-r--r--tests/auto/render/render.pro3
5 files changed, 152 insertions, 2 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; }
diff --git a/tests/auto/render/qrendersurfaceselector/qrendersurfaceselector.pro b/tests/auto/render/qrendersurfaceselector/qrendersurfaceselector.pro
new file mode 100644
index 000000000..57626b9ef
--- /dev/null
+++ b/tests/auto/render/qrendersurfaceselector/qrendersurfaceselector.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+
+TARGET = tst_qrendersurfaceselector
+QT += core-private 3dcore 3dcore-private 3drender 3drender-private testlib
+
+CONFIG += testcase
+
+SOURCES += tst_qrendersurfaceselector.cpp
+
+include(../commons/commons.pri)
diff --git a/tests/auto/render/qrendersurfaceselector/tst_qrendersurfaceselector.cpp b/tests/auto/render/qrendersurfaceselector/tst_qrendersurfaceselector.cpp
new file mode 100644
index 000000000..17c7cf40d
--- /dev/null
+++ b/tests/auto/render/qrendersurfaceselector/tst_qrendersurfaceselector.cpp
@@ -0,0 +1,107 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QTest>
+#include <Qt3DCore/qentity.h>
+
+#include <Qt3DRender/qrendersettings.h>
+#include <Qt3DRender/qrendersurfaceselector.h>
+#include <Qt3DRender/private/qrendersurfaceselector_p.h>
+
+class tst_QRenderSurfaceSelector: public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void shouldFindInstanceInEntityTree_data()
+ {
+ QTest::addColumn<QSharedPointer<Qt3DCore::QEntity>>("root");
+ QTest::addColumn<Qt3DRender::QRenderSurfaceSelector*>("expected");
+
+ auto root = QSharedPointer<Qt3DCore::QEntity>::create();
+ auto settings = new Qt3DRender::QRenderSettings;
+ root->addComponent(settings);
+ auto selector = new Qt3DRender::QRenderSurfaceSelector;
+ settings->setActiveFrameGraph(selector);
+ QTest::newRow("simplest_tree") << root << selector;
+
+ root = QSharedPointer<Qt3DCore::QEntity>::create();
+ settings = new Qt3DRender::QRenderSettings;
+ root->addComponent(settings);
+ settings->setActiveFrameGraph(new Qt3DRender::QFrameGraphNode);
+ selector = nullptr;
+ QTest::newRow("no_selector") << root << selector;
+
+ root = QSharedPointer<Qt3DCore::QEntity>::create();
+ settings = new Qt3DRender::QRenderSettings;
+ root->addComponent(settings);
+ selector = nullptr;
+ QTest::newRow("no_framegraph") << root << selector;
+
+ root = QSharedPointer<Qt3DCore::QEntity>::create();
+ selector = nullptr;
+ QTest::newRow("no_rendersettings") << root << selector;
+
+ root = QSharedPointer<Qt3DCore::QEntity>::create();
+ auto entity = new Qt3DCore::QEntity(root.data());
+ entity = new Qt3DCore::QEntity(entity);
+ settings = new Qt3DRender::QRenderSettings;
+ entity->addComponent(settings);
+ selector = new Qt3DRender::QRenderSurfaceSelector;
+ settings->setActiveFrameGraph(selector);
+ QTest::newRow("in_subentity") << root << selector;
+
+ root = QSharedPointer<Qt3DCore::QEntity>::create();
+ entity = new Qt3DCore::QEntity(root.data());
+ entity = new Qt3DCore::QEntity(entity);
+ settings = new Qt3DRender::QRenderSettings;
+ entity->addComponent(settings);
+ auto node = new Qt3DRender::QFrameGraphNode;
+ settings->setActiveFrameGraph(node);
+ node = new Qt3DRender::QFrameGraphNode(node);
+ selector = new Qt3DRender::QRenderSurfaceSelector(node);
+ QTest::newRow("in_deeper_framegraph") << root << selector;
+ }
+
+ void shouldFindInstanceInEntityTree()
+ {
+ // GIVEN
+ QFETCH(QSharedPointer<Qt3DCore::QEntity>, root);
+
+ // WHEN
+ auto selector = Qt3DRender::QRenderSurfaceSelectorPrivate::find(root.data());
+
+ // THEN
+ QFETCH(Qt3DRender::QRenderSurfaceSelector*, expected);
+ QCOMPARE(selector, expected);
+ }
+};
+
+QTEST_MAIN(tst_QRenderSurfaceSelector)
+
+#include "tst_qrendersurfaceselector.moc"
diff --git a/tests/auto/render/render.pro b/tests/auto/render/render.pro
index bfd2abe09..7cd682e13 100644
--- a/tests/auto/render/render.pro
+++ b/tests/auto/render/render.pro
@@ -49,5 +49,6 @@ contains(QT_CONFIG, private_tests) {
layerfiltering \
filterentitybycomponent \
genericlambdajob \
- qgraphicsapifilter
+ qgraphicsapifilter \
+ qrendersurfaceselector
}