aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/nodes
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/quick/nodes')
-rw-r--r--tests/auto/quick/nodes/nodes.pro2
-rw-r--r--tests/auto/quick/nodes/tst_nodestest.cpp157
2 files changed, 30 insertions, 129 deletions
diff --git a/tests/auto/quick/nodes/nodes.pro b/tests/auto/quick/nodes/nodes.pro
index 2e3a4455ea..256318a441 100644
--- a/tests/auto/quick/nodes/nodes.pro
+++ b/tests/auto/quick/nodes/nodes.pro
@@ -6,5 +6,5 @@ SOURCES += tst_nodestest.cpp
CONFIG+=parallel_test
-QT += core-private gui-private qml-private quick-private opengl widgets testlib
+QT += core-private gui-private qml-private quick-private testlib
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/quick/nodes/tst_nodestest.cpp b/tests/auto/quick/nodes/tst_nodestest.cpp
index a8094002dd..3ba7771538 100644
--- a/tests/auto/quick/nodes/tst_nodestest.cpp
+++ b/tests/auto/quick/nodes/tst_nodestest.cpp
@@ -42,12 +42,15 @@
#include <QtCore/QString>
#include <QtTest/QtTest>
+#include <QtGui/QOffscreenSurface>
+#include <QtGui/QOpenGLContext>
+
#include <QtQuick/qsgnode.h>
-#include <QtQuick/private/qsgrenderer_p.h>
+#include <QtQuick/private/qsgbatchrenderer_p.h>
#include <QtQuick/private/qsgnodeupdater_p.h>
#include <QtQuick/qsgsimplerectnode.h>
-#include <QtOpenGL/QGLWidget>
+
class NodesTest : public QObject
{
Q_OBJECT
@@ -57,41 +60,45 @@ public:
private Q_SLOTS:
void initTestCase();
- void cleanupTestCase() {
- delete widget;
- }
+ void cleanupTestCase();
// Root nodes
void propegate();
void propegateWithMultipleRoots();
- void simulatedEffect_data();
- void simulatedEffect();
// Opacity nodes
void basicOpacityNode();
void opacityPropegation();
- // QSGNodeUpdater
void isBlockedCheck();
private:
- QGLWidget *widget;
-
- QSGNodeUpdater updater;
+ QOffscreenSurface *surface;
+ QOpenGLContext *context;
};
void NodesTest::initTestCase()
{
- widget = new QGLWidget();
- widget->resize(100, 30);
- widget->show();
+ surface = new QOffscreenSurface;
+ surface->create();
+
+ context = new QOpenGLContext();
+ context->create();
+ context->makeCurrent(surface);
}
-class DummyRenderer : public QSGRenderer
+void NodesTest::cleanupTestCase()
+{
+ context->doneCurrent();
+ delete context;
+ delete surface;
+}
+
+class DummyRenderer : public QSGBatchRenderer::Renderer
{
public:
DummyRenderer(QSGRootNode *root)
- : QSGRenderer(QSGContext::createDefaultContext())
+ : QSGBatchRenderer::Renderer(QSGContext::createDefaultContext())
, changedNode(0)
, changedState(0)
, renderCount(0)
@@ -107,7 +114,7 @@ public:
void nodeChanged(QSGNode *node, QSGNode::DirtyState state) {
changedNode = node;
changedState = state;
- QSGRenderer::nodeChanged(node, state);
+ QSGBatchRenderer::Renderer::nodeChanged(node, state);
}
QSGNode *changedNode;
@@ -163,114 +170,6 @@ void NodesTest::propegateWithMultipleRoots()
QCOMPARE((int) ren2.changedState, (int) QSGNode::DirtyGeometry);
}
-
-
-class SimulatedEffectRenderer : public DummyRenderer
-{
-public:
- SimulatedEffectRenderer(QSGRootNode *root, QSGBasicGeometryNode *c)
- : DummyRenderer(root)
- {
- child = c;
- }
-
- void render() {
- matrix = child->matrix() ? *child->matrix() : QMatrix4x4();
- DummyRenderer::render();
- }
-
- QSGBasicGeometryNode *child;
- QMatrix4x4 matrix;
-};
-
-
-class PseudoEffectNode : public QSGNode {
-public:
- PseudoEffectNode(QSGRenderer *r)
- : renderer(r)
- {
- setFlag(UsePreprocess);
- }
-
- void preprocess() {
-
- if (renderer->rootNode()->parent()) {
- // Mark the root dirty to build a clean state from the root and down
- renderer->rootNode()->markDirty(QSGNode::DirtyForceUpdate);
- }
-
- renderer->renderScene();
-
- if (renderer->rootNode()->parent()) {
- // Mark the parent of the root dirty to force the root and down to be updated.
- renderer->rootNode()->parent()->markDirty(QSGNode::DirtyForceUpdate);
- }
- }
-
- QSGRenderer *renderer;
-};
-
-void NodesTest::simulatedEffect_data()
-{
- QTest::addColumn<bool>("connected");
-
- QTest::newRow("connected") << true;
- QTest::newRow("disconnected") << false;
-}
-
-void NodesTest::simulatedEffect()
-{
- QFETCH(bool, connected);
-
- QSGRootNode root;
- QSGRootNode source;
- QSGTransformNode xform;
- QSGSimpleRectNode geometry;
- geometry.setRect(QRectF(0, 0, 1, 1));
- geometry.setColor(Qt::red);
-
- root.setFlag(QSGNode::OwnedByParent, false);
- source.setFlag(QSGNode::OwnedByParent, false);
- xform.setFlag(QSGNode::OwnedByParent, false);
- geometry.setFlag(QSGNode::OwnedByParent, false);
-
- SimulatedEffectRenderer rootRenderer(&root, &geometry);
- SimulatedEffectRenderer sourceRenderer(&source, &geometry);
-
- PseudoEffectNode effect(&sourceRenderer);
-
- /*
- root Source is redirected into effect using the SimulatedEffectRenderer
- / \
- xform effect
- |
- source
- |
- geometry
- */
-
- root.appendChildNode(&xform);
- root.appendChildNode(&effect);
- if (connected)
- xform.appendChildNode(&source);
- source.appendChildNode(&geometry);
- QMatrix4x4 m; m.translate(1, 2, 3);
- xform.setMatrix(m);
-
- // Clear all dirty states...
- updater.updateStates(&root);
-
- rootRenderer.renderScene();
-
- // compare that we got one render call to each
- QCOMPARE(rootRenderer.renderCount, 1);
- QCOMPARE(sourceRenderer.renderCount, 1);
- QVERIFY(sourceRenderer.renderingOrder < rootRenderer.renderingOrder);
- if (connected) // geometry is not rendered in this case, so skip it...
- QCOMPARE(rootRenderer.matrix, xform.matrix());
- QCOMPARE(sourceRenderer.matrix, QMatrix4x4());
-}
-
void NodesTest::basicOpacityNode()
{
QSGOpacityNode n;
@@ -296,6 +195,8 @@ void NodesTest::opacityPropegation()
QSGSimpleRectNode *geometry = new QSGSimpleRectNode;
geometry->setRect(0, 0, 100, 100);
+ DummyRenderer renderer(&root);
+
root.appendChildNode(a);
a->appendChildNode(b);
b->appendChildNode(c);
@@ -305,7 +206,7 @@ void NodesTest::opacityPropegation()
b->setOpacity(0.8);
c->setOpacity(0.7);
- updater.updateStates(&root);
+ renderer.renderScene();
QCOMPARE(a->combinedOpacity(), 0.9);
QCOMPARE(b->combinedOpacity(), 0.9 * 0.8);
@@ -313,7 +214,7 @@ void NodesTest::opacityPropegation()
QCOMPARE(geometry->inheritedOpacity(), 0.9 * 0.8 * 0.7);
b->setOpacity(0.1);
- updater.updateStates(&root);
+ renderer.renderScene();
QCOMPARE(a->combinedOpacity(), 0.9);
QCOMPARE(b->combinedOpacity(), 0.9 * 0.1);
@@ -321,7 +222,7 @@ void NodesTest::opacityPropegation()
QCOMPARE(geometry->inheritedOpacity(), 0.9 * 0.1 * 0.7);
b->setOpacity(0);
- updater.updateStates(&root);
+ renderer.renderScene();
QVERIFY(b->isSubtreeBlocked());