diff options
Diffstat (limited to 'examples/quick/quickshapes/shapes/sampling.qml')
-rw-r--r-- | examples/quick/quickshapes/shapes/sampling.qml | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/examples/quick/quickshapes/shapes/sampling.qml b/examples/quick/quickshapes/shapes/sampling.qml new file mode 100644 index 0000000000..27515b6722 --- /dev/null +++ b/examples/quick/quickshapes/shapes/sampling.qml @@ -0,0 +1,257 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +import QtQuick +import QtQuick.Shapes + +Rectangle { + id: root + width: 1024 + height: 768 + + readonly property color col: "lightsteelblue" + gradient: Gradient { + GradientStop { + position: 0.0 + color: Qt.tint(root.col, "#20FFFFFF") + } + GradientStop { + position: 0.1 + color: Qt.tint(root.col, "#20AAAAAA") + } + GradientStop { + position: 0.9 + color: Qt.tint(root.col, "#20666666") + } + GradientStop { + position: 1.0 + color: Qt.tint(root.col, "#20000000") + } + } + + Row { + anchors { + fill: parent + margins: 20 + } + spacing: 40 + + Column { + spacing: 40 + + Text { + text: qsTr("Original") + } + + // A simple Shape without anything special. + Rectangle { + color: "lightGray" + width: 400 + height: 200 + + Shape { + x: 30 + y: 20 + width: 50 + height: 50 + scale: 2 + + ShapePath { + strokeColor: "green" + NumberAnimation on strokeWidth { + from: 1 + to: 20 + duration: 5000 + } + fillColor: "transparent" + capStyle: ShapePath.RoundCap + + startX: 40 + startY: 30 + PathQuad { + x: 50 + y: 80 + controlX: 0 + controlY: 80 + } + PathLine { + x: 150 + y: 80 + } + PathQuad { + x: 160 + y: 30 + controlX: 200 + controlY: 80 + } + } + } + } + + Text { + text: qsTr("Supersampling (2x)") + } + + // Now let's use 2x supersampling via layers. This way the entire subtree + // is rendered into an FBO twice the size and then drawn with linear + // filtering. This allows having some level of AA even when there is no + // support for multisample framebuffers. + Rectangle { + id: supersampledItem + color: "lightGray" + width: 400 + height: 200 + + layer.enabled: true + layer.smooth: true + layer.textureSize: Qt.size(supersampledItem.width * 2, supersampledItem.height * 2) + + Shape { + x: 30 + y: 20 + width: 50 + height: 50 + scale: 2 + + ShapePath { + strokeColor: "green" + NumberAnimation on strokeWidth { + from: 1 + to: 20 + duration: 5000 + } + fillColor: "transparent" + capStyle: ShapePath.RoundCap + + startX: 40 + startY: 30 + PathQuad { + x: 50 + y: 80 + controlX: 0 + controlY: 80 + } + PathLine { + x: 150 + y: 80 + } + PathQuad { + x: 160 + y: 30 + controlX: 200 + controlY: 80 + } + } + } + } + } + + Column { + spacing: 40 + + Text { + text: qsTr("Multisampling (4x)") + } + + // Now let's use 4x MSAA, again via layers. This needs support for + // multisample renderbuffers and framebuffer blits. + Rectangle { + color: "lightGray" + width: 400 + height: 200 + + layer.enabled: true + layer.smooth: true + layer.samples: 4 + + Shape { + x: 30 + y: 20 + width: 50 + height: 50 + scale: 2 + + ShapePath { + strokeColor: "green" + NumberAnimation on strokeWidth { + from: 1 + to: 20 + duration: 5000 + } + fillColor: "transparent" + capStyle: ShapePath.RoundCap + + startX: 40 + startY: 30 + PathQuad { + x: 50 + y: 80 + controlX: 0 + controlY: 80 + } + PathLine { + x: 150 + y: 80 + } + PathQuad { + x: 160 + y: 30 + controlX: 200 + controlY: 80 + } + } + } + } + Text { + text: qsTr("CurveRenderer") + } + + // Now let's use CurveRenderer with built-in antialiasing support. + Rectangle { + color: "lightGray" + width: 400 + height: 200 + + Shape { + x: 30 + y: 20 + width: 50 + height: 50 + scale: 2 + preferredRendererType: Shape.CurveRenderer + antialiasing: true + + ShapePath { + strokeColor: "green" + NumberAnimation on strokeWidth { + from: 1 + to: 20 + duration: 5000 + } + fillColor: "transparent" + capStyle: ShapePath.RoundCap + + startX: 40 + startY: 30 + PathQuad { + x: 50 + y: 80 + controlX: 0 + controlY: 80 + } + PathLine { + x: 150 + y: 80 + } + PathQuad { + x: 160 + y: 30 + controlX: 200 + controlY: 80 + } + } + } + } + } + } +} |