diff options
author | Gunnar Sletta <gunnar.sletta@digia.com> | 2013-11-06 10:06:27 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-11-09 22:46:47 +0100 |
commit | afee694ce5d65518e5908b97e9a691c03fe0a844 (patch) | |
tree | be6e714703b799791cdacbea4b315471ab9b6a03 /tests/auto/quick/scenegraph | |
parent | 7b75c3e63e7842c2667f58d43d44e21ff57ac0c8 (diff) |
Avoid using huge floating point values in the renderer.
We pretransform vertices relative to their batch root and upload these
using single-precision floats. If the offsets are huge then the
floating point numbers start to get unstable and we get rendering
artifacts as a result. This typically happens for lists/tables with
huge models.
Task-number: QTBUG-34312
Change-Id: I2516f2b4fa93f44a1288659d05458fb1af0df943
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Diffstat (limited to 'tests/auto/quick/scenegraph')
-rw-r--r-- | tests/auto/quick/scenegraph/data/render_OutOfFloatRange.qml | 108 | ||||
-rw-r--r-- | tests/auto/quick/scenegraph/scenegraph.pro | 3 | ||||
-rw-r--r-- | tests/auto/quick/scenegraph/tst_scenegraph.cpp | 1 |
3 files changed, 112 insertions, 0 deletions
diff --git a/tests/auto/quick/scenegraph/data/render_OutOfFloatRange.qml b/tests/auto/quick/scenegraph/data/render_OutOfFloatRange.qml new file mode 100644 index 0000000000..60caa4d561 --- /dev/null +++ b/tests/auto/quick/scenegraph/data/render_OutOfFloatRange.qml @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.2 + +/* + The test verifies that batching does not interfere with overlapping + regions. + + #samples: 8 + PixelPos R G B Error-tolerance + #base: 10 10 1.0 0.0 0.0 0.0 + #base: 10 110 1.0 0.0 0.0 0.0 + #base: 10 11 0.0 0.0 1.0 0.0 + #base: 10 111 0.0 0.0 1.0 0.0 + + #final: 10 10 1.0 0.0 0.0 0.05 + #final: 10 110 1.0 0.0 0.0 0.05 + #final: 10 11 0.0 0.0 1.0 0.05 + #final: 10 111 0.0 0.0 1.0 0.05 +*/ + +RenderTestBase +{ + id: root + property real offset: 0; + property real farAway: 10000000; + + Item { + y: -root.offset + 10 + x: 10 + Repeater { + model: 200 + Rectangle { + x: index % 100 + y: root.offset + (index < 100 ? 0 : 1); + width: 1 + height: 1 + color: index < 100 ? "red" : "blue" + antialiasing: true; + } + } + } + + Item { + y: -root.offset + 110 + x: 10 + Item { + y: root.offset + + Repeater { + model: 200 + Rectangle { + x: index % 100 + y: (index < 100 ? 0 : 1); + width: 1 + height: 1 + color: index < 100 ? "red" : "blue" + antialiasing: true; + } + } + } + } + + onEnterFinalStage: { + root.offset = root.farAway; + root.finalStageComplete = true; + } + +} diff --git a/tests/auto/quick/scenegraph/scenegraph.pro b/tests/auto/quick/scenegraph/scenegraph.pro index 7e7a8eb162..105221b7f4 100644 --- a/tests/auto/quick/scenegraph/scenegraph.pro +++ b/tests/auto/quick/scenegraph/scenegraph.pro @@ -9,3 +9,6 @@ macx:CONFIG -= app_bundle QT += core-private gui-private qml-private quick-private testlib DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 + +OTHER_FILES += \ + data/render_OutOfFloatRange.qml diff --git a/tests/auto/quick/scenegraph/tst_scenegraph.cpp b/tests/auto/quick/scenegraph/tst_scenegraph.cpp index 656e1c5a58..755cec460d 100644 --- a/tests/auto/quick/scenegraph/tst_scenegraph.cpp +++ b/tests/auto/quick/scenegraph/tst_scenegraph.cpp @@ -322,6 +322,7 @@ void tst_SceneGraph::render_data() << "data/render_Overlap.qml" << "data/render_MovingOverlap.qml" << "data/render_BreakOpacityBatch.qml" + << "data/render_OutOfFloatRange.qml" ; QRegExp sampleCount("#samples: *(\\d+)"); |