Revision control
+ // Copyright (C) 2026 The Qt Company Ltd.
+ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+ import QtQuick
+ import QtQuick3D
+ import QtQuick3D.AssetUtils
+
+ Item {
+ id: root
+ width: 200
+ height: 200
+
+ readonly property var sources: [
+ "texquad.gltf", // textures, sampler, KHR_texture_transform
+ "extmats.gltf", // material extensions incl. specular glossy and unlit
+ "simpleskin.gltf", // skinning and skeletal animation
+ "morphquad.gltf", // morph targets and weight animation
+ "animquad.gltf" // node TRS animation with LINEAR and STEP sampling
+ ]
+ readonly property int totalCount: sources.length
+ property int loadedCount: 0
+ property int doneCount: 0
+ property string errors: ""
+ readonly property bool settled: doneCount === totalCount
+
+ View3D {
+ anchors.fill: parent
+
+ DirectionalLight {}
+ PerspectiveCamera { position: Qt.vector3d(0, 0, 600) }
+
+ Repeater3D {
+ model: root.sources
+ RuntimeLoader {
+ required property string modelData
+ required property int index
+ x: (index - root.sources.length / 2) * 150
+ scale: Qt.vector3d(50, 50, 50)
+ source: Qt.resolvedUrl(modelData)
+ onStatusChanged: {
+ if (status === RuntimeLoader.Success) {
+ root.loadedCount++
+ root.doneCount++
+ } else if (status === RuntimeLoader.Error) {
+ root.errors += modelData + ": " + errorString + "\n"
+ root.doneCount++
+ }
+ }
+ }
+ }
+ }
+ }