// 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 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 anchors.margins: 20 spacing: 40 Column { spacing: 40 Text { text: "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: "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: "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 } } } } } } }