Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qssgscenedesc.cpp
Go to the documentation of this file.
1
// Copyright (C) 2022 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
// Qt-Security score:significant reason:default
4
5
6
#
include
"qssgscenedesc_p.h"
7
8
QT_BEGIN_NAMESPACE
9
10
bool
QSSGSceneDesc::PropertyCall::set(QQuick3DObject &,
const
char
*,
const
void
*) {
return
false
; }
11
bool
QSSGSceneDesc::PropertyCall::get(
const
QQuick3DObject &,
const
void
*[])
const
{
return
false
; }
12
13
static
inline
quint16
getNextNodeId
(QSSGSceneDesc::Scene &scene)
14
{
15
/* root node uses the default value 0 */
16
return
++scene.nodeId;
17
}
18
19
void
QSSGSceneDesc
::
addNode
(
QSSGSceneDesc
::Node &parent,
QSSGSceneDesc
::Node &node)
20
{
21
Q_ASSERT(parent.scene);
22
node.scene = parent.scene;
23
node.id = getNextNodeId(*parent.scene);
24
25
if
(QSSGRenderGraphObject::isResource(node.runtimeType) || node.nodeType == Node::Type::Mesh || node.nodeType == Node::Type::Skeleton)
26
node.scene->resources.push_back(&node);
27
else
// Here goes nothing: kick all the resources out of the tree...
28
parent.children.push_back(&node);
29
}
30
31
void
QSSGSceneDesc
::
addNode
(QSSGSceneDesc::Scene &scene, QSSGSceneDesc::Node &node)
32
{
33
if
(scene.root) {
34
addNode(*scene.root, node);
35
}
else
{
36
Q_ASSERT(node.id == 0);
37
node.scene = &scene;
38
scene.root = &node;
39
}
40
}
41
42
void
QSSGSceneDesc::Scene::reset()
43
{
44
id.clear();
45
nodeId = 0;
46
root =
nullptr
;
47
resources.clear();
48
meshStorage.clear();
49
materialVariants.clear();
50
}
51
52
void
QSSGSceneDesc::Scene::cleanup()
53
{
54
id.clear();
55
nodeId = 0;
56
57
// An import that failed before building anything leaves no root, and
58
// releasing such a scene has to be allowed
59
if
(root) {
60
root->cleanupChildren();
61
delete
root;
62
root =
nullptr
;
63
}
64
65
qDeleteAll(resources);
66
resources.clear();
67
68
for
(
auto
*anim : std::as_const(animations)) {
69
for
(
auto
*ch : std::as_const(anim->channels)) {
70
qDeleteAll(ch->keys);
71
ch->keys.clear();
72
delete
ch;
73
}
74
delete
anim;
75
}
76
animations.clear();
77
}
78
79
QMetaType
QSSGSceneDesc
::listViewMetaType()
80
{
81
return
QMetaType::fromType<QSSGSceneDesc::ListView *>();
82
}
83
84
void
QSSGSceneDesc
::
destructValue
(QVariant &value)
85
{
86
if
(!value.isValid())
87
return
;
88
89
if
(value.metaType() == QMetaType::fromType<QSSGSceneDesc::NodeList *>())
90
delete
value.value<NodeList *>();
91
else
if
(value.metaType() == QMetaType::fromType<QSSGSceneDesc::ListView *>())
92
delete
value.value<ListView *>();
93
// Non-pointer types are destructed by ~QVariant
94
else
if
((value.metaType().flags() & QMetaType::TypeFlag::IsPointer)
95
// Mesh node will be deleted when cleaning up resources.
96
&& (value.metaType() != QMetaType::fromType<QSSGSceneDesc::Mesh *>())
97
// Referencing nodes will not be deleted here.
98
// They should be deleted in the node hierarchy or resources.
99
&& (value.metaType().id() != qMetaTypeId<QSSGSceneDesc::Node *>())) {
100
qWarning() << value.metaType().name() <<
" was not destroyed correctly."
;
101
}
102
}
103
104
void
QSSGSceneDesc
::
destructNode
(Node &node)
105
{
106
for
(
auto
*prop : std::as_const(node.properties))
107
delete
prop;
108
// Not necessary to clear the list as long as we only call this from the destructor
109
}
110
111
QSSGSceneDesc::Node::~Node() { destructNode(*
this
); }
112
113
void
QSSGSceneDesc::Node::cleanupChildren()
114
{
115
auto
firstIt = children.begin();
116
auto
lastIt = children.end();
117
for
(
auto
it = firstIt; it != lastIt; ++it) {
118
Node *node = *it;
119
node->cleanupChildren();
120
delete
node;
121
}
122
}
123
124
QSSGSceneDesc::Property *
QSSGSceneDesc
::setProperty(Node &node,
const
char
*name, QVariant &&value)
125
{
126
Q_ASSERT(node.scene);
127
QSSGSceneDesc::Property *prop =
new
QSSGSceneDesc::Property;
128
prop->name = name;
129
prop->call =
nullptr
;
130
prop->value = value;
131
node.properties.push_back(prop);
132
return
prop;
133
}
134
135
QSSGSceneDesc::Model::Model() : Node(Node::Type::Model, Node::RuntimeType::Model) {}
136
137
QSSGSceneDesc::Camera::Camera(RuntimeType rt) : Node(Node::Type::Camera, rt) {}
138
139
QSSGSceneDesc::Light::Light(RuntimeType rt) : Node(Node::Type::Light, rt) {}
140
141
QSSGSceneDesc::Skin::Skin() : Node(Node::Type::Skin, Node::RuntimeType::Skin) {}
142
143
QSSGSceneDesc::Skeleton::Skeleton() : Node(Node::Type::Skeleton, Node::RuntimeType::Skeleton) {}
144
145
QSSGSceneDesc::Joint::Joint() : Node(Node::Type::Joint, Node::RuntimeType::Joint) {}
146
147
QSSGSceneDesc::MorphTarget::MorphTarget() : Node(Node::Type::MorphTarget, Node::RuntimeType::MorphTarget) {}
148
QSSGSceneDesc::Instancing::Instancing() : Node(Node::Type::Instancing, Node::RuntimeType::ModelInstance) {}
149
150
QSSGSceneDesc::Material::Material(RuntimeType rt) : Node(Node::Type::Material, rt) {}
151
152
QSSGSceneDesc::Texture::Texture(RuntimeType rt,
const
QByteArray &name)
153
: Node(name, Node::Type::Texture, rt)
154
{
155
}
156
157
QSSGSceneDesc::TextureData::TextureData(
const
QByteArray &textureData, QSize size,
const
QByteArray &format, quint8 flags, QByteArray name)
158
: Node(name, Node::Type::Texture, RuntimeType::TextureData)
159
, data(textureData)
160
, sz(size)
161
, fmt(format)
162
, flgs(flags)
163
{}
164
165
QSSGSceneDesc::Mesh::Mesh(QByteArray name, qsizetype index)
166
: Node(name, Node::Type::Mesh, RuntimeType::Node)
167
, idx(index)
168
{}
169
170
QT_END_NAMESPACE
QSSGSceneDesc
Definition
qssgassetimporter_p.h:32
QSSGSceneDesc::addNode
Q_QUICK3DASSETUTILS_EXPORT void addNode(Node &parent, Node &node)
Definition
qssgscenedesc.cpp:19
QSSGSceneDesc::addNode
Q_QUICK3DASSETUTILS_EXPORT void addNode(Scene &scene, Node &node)
Definition
qssgscenedesc.cpp:31
QSSGSceneDesc::destructNode
Q_QUICK3DASSETUTILS_EXPORT void destructNode(QSSGSceneDesc::Node &node)
Definition
qssgscenedesc.cpp:104
QSSGSceneDesc::destructValue
Q_QUICK3DASSETUTILS_EXPORT void destructValue(QVariant &value)
Definition
qssgscenedesc.cpp:84
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
getNextNodeId
static quint16 getNextNodeId(QSSGSceneDesc::Scene &scene)
Definition
qssgscenedesc.cpp:13
qtquick3d
src
assetutils
qssgscenedesc.cpp
Generated on
for Qt by
1.18.0