Qt
6.x
The Qt SDK
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
4
#include "
qssgscenedesc_p.h
"
5
6
QT_BEGIN_NAMESPACE
7
8
bool
QSSGSceneDesc::PropertyCall::set
(
QQuick3DObject
&,
const
char
*,
const
void
*) {
return
false
; }
9
bool
QSSGSceneDesc::PropertyCall::get
(
const
QQuick3DObject
&,
const
void
*[])
const
{
return
false
; }
10
11
static
inline
quint16
getNextNodeId
(
QSSGSceneDesc::Scene
&
scene
)
12
{
13
/* root node uses the default value 0 */
14
return
++
scene
.nodeId;
15
}
16
17
void
QSSGSceneDesc::addNode
(
QSSGSceneDesc::Node
&
parent
,
QSSGSceneDesc::Node
&node)
18
{
19
Q_ASSERT
(
parent
.scene);
20
node.
scene
=
parent
.scene;
21
node.
id
=
getNextNodeId
(*
parent
.scene);
22
23
if
(
QSSGRenderGraphObject::isResource
(node.
runtimeType
) || node.
nodeType
== Node::Type::Mesh || node.
nodeType
== Node::Type::Skeleton)
24
node.
scene
->
resources
.
push_back
(&node);
25
else
// Here goes nothing: kick all the resources out of the tree...
26
parent
.children.push_back(&node);
27
}
28
29
void
QSSGSceneDesc::addNode
(
QSSGSceneDesc::Scene
&
scene
,
QSSGSceneDesc::Node
&node)
30
{
31
if
(
scene
.root) {
32
addNode
(*
scene
.root, node);
33
}
else
{
34
Q_ASSERT
(node.
id
== 0);
35
node.
scene
= &
scene
;
36
scene
.root = &node;
37
}
38
}
39
40
void
QSSGSceneDesc::Scene::reset
()
41
{
42
id
.clear();
43
nodeId = 0;
44
root =
nullptr
;
45
resources.clear();
46
meshStorage.clear();
47
}
48
49
void
QSSGSceneDesc::Scene::cleanup
()
50
{
51
id
.clear();
52
nodeId = 0;
53
54
root->cleanupChildren();
55
delete
root;
56
root =
nullptr
;
57
58
qDeleteAll
(resources);
59
resources.clear();
60
61
for
(
auto
*anim: animations) {
62
for
(
auto
*
ch
: anim->channels) {
63
qDeleteAll
(
ch
->keys);
64
ch
->keys.clear();
65
delete
ch
;
66
}
67
delete
anim;
68
}
69
animations.clear();
70
}
71
72
QMetaType
QSSGSceneDesc::listViewMetaType
()
73
{
74
return
QMetaType::fromType<QSSGSceneDesc::ListView *>();
75
}
76
77
void
QSSGSceneDesc::destructValue
(
QVariant
&
value
)
78
{
79
if
(!
value
.isValid())
80
return
;
81
82
if
(
value
.metaType() == QMetaType::fromType<QSSGSceneDesc::NodeList *>())
83
delete
value
.value<
NodeList
*>();
84
else
if
(
value
.metaType() == QMetaType::fromType<QSSGSceneDesc::ListView *>())
85
delete
value
.value<
ListView
*>();
86
// Non-pointer types are destructed by ~QVariant
87
else
if
((
value
.metaType().flags() &
QMetaType::TypeFlag::IsPointer
)
88
// Mesh node will be deleted when cleaning up resources.
89
&& (
value
.metaType() != QMetaType::fromType<QSSGSceneDesc::Mesh *>())
90
// Referencing nodes will not be deleted here.
91
// They should be deleted in the node hierarchy or resources.
92
&& (
value
.metaType().id() != qMetaTypeId<QSSGSceneDesc::Node *>())) {
93
qWarning
() <<
value
.metaType().name() <<
" was not destroyed correctly."
;
94
}
95
}
96
97
void
QSSGSceneDesc::destructNode
(
Node
&node)
98
{
99
for
(
auto
*prop : node.
properties
)
100
delete
prop;
101
// Not necessary to clear the list as long as we only call this from the destructor
102
}
103
104
QSSGSceneDesc::Node::~Node
() {
destructNode
(*
this
); }
105
106
void
QSSGSceneDesc::Node::cleanupChildren
()
107
{
108
auto
firstIt = children.begin();
109
auto
lastIt = children.end();
110
for
(
auto
it
= firstIt;
it
!= lastIt; ++
it
) {
111
Node
*node = *
it
;
112
node->
cleanupChildren
();
113
delete
node;
114
}
115
}
116
117
QSSGSceneDesc::Property
*
QSSGSceneDesc::setProperty
(
Node
&node,
const
char
*
name
,
QVariant
&&
value
)
118
{
119
Q_ASSERT
(node.
scene
);
120
QSSGSceneDesc::Property
*prop =
new
QSSGSceneDesc::Property
;
121
prop->
name
=
name
;
122
prop->
call
=
nullptr
;
123
prop->
value
=
value
;
124
node.
properties
.push_back(prop);
125
return
prop;
126
}
127
128
QSSGSceneDesc::Model::Model
() :
Node
(
Node
::
Type
::
Model
,
Node
::
RuntimeType
::
Model
) {}
129
130
QSSGSceneDesc::Camera::Camera
(
RuntimeType
rt) :
Node
(
Node
::
Type
::
Camera
, rt) {}
131
132
QSSGSceneDesc::Light::Light
(
RuntimeType
rt) :
Node
(
Node
::
Type
::
Light
, rt) {}
133
134
QSSGSceneDesc::Skin::Skin
() :
Node
(
Node
::
Type
::
Skin
,
Node
::
RuntimeType
::
Skin
) {}
135
136
QSSGSceneDesc::Skeleton::Skeleton
() :
Node
(
Node
::
Type
::
Skeleton
,
Node
::
RuntimeType
::
Skeleton
) {}
137
138
QSSGSceneDesc::Joint::Joint
() :
Node
(
Node
::
Type
::
Joint
,
Node
::
RuntimeType
::
Joint
) {}
139
140
QSSGSceneDesc::MorphTarget::MorphTarget
() :
Node
(
Node
::
Type
::
MorphTarget
,
Node
::
RuntimeType
::
MorphTarget
) {}
141
142
QSSGSceneDesc::Material::Material
(
RuntimeType
rt) :
Node
(
Node
::
Type
::
Material
, rt) {}
143
144
QSSGSceneDesc::Texture::Texture
(
RuntimeType
rt,
const
QByteArray
&
name
)
145
:
Node
(
name
,
Node
::
Type
::
Texture
, rt)
146
{
147
}
148
149
QSSGSceneDesc::TextureData::TextureData
(
const
QByteArray
&textureData,
QSize
size
,
const
QByteArray
&
format
,
quint8
flags
,
QByteArray
name
)
150
:
Node
(
name
,
Node
::
Type
::
Texture
,
RuntimeType
::
TextureData
)
151
,
data
(textureData)
152
, sz(
size
)
153
,
fmt
(
format
)
154
, flgs(
flags
)
155
{}
156
157
QSSGSceneDesc::Mesh::Mesh
(
QByteArray
name
,
qsizetype
index
)
158
:
Node
(
name
,
Node
::
Type
::
Mesh
,
RuntimeType
::
Node
)
159
, idx(
index
)
160
{}
161
162
QT_END_NAMESPACE
QByteArray
\inmodule QtCore
Definition
qbytearray.h:57
QMetaType
\inmodule QtCore
Definition
qmetatype.h:320
QMetaType::IsPointer
@ IsPointer
Definition
qmetatype.h:393
QQuick3DObject
\qmltype Object3D \inqmlmodule QtQuick3D \instantiates QQuick3DObject \inherits QtObject
Definition
qquick3dobject.h:22
QSize
\inmodule QtCore
Definition
qsize.h:25
QVarLengthArray::push_back
void push_back(const T &t)
Definition
qvarlengtharray.h:578
QVariant
\inmodule QtCore
Definition
qvariant.h:64
qDeleteAll
qDeleteAll(list.begin(), list.end())
it
QSet< QString >::iterator it
Definition
doc_src_qset.cpp:85
QSSGSceneDesc::setProperty
static void setProperty(QSSGSceneDesc::Node &node, const char *name, Setter setter, T &&value)
Definition
qssgscenedesc_p.h:585
QSSGSceneDesc::addNode
Q_QUICK3DASSETUTILS_EXPORT void addNode(Node &parent, Node &node)
Definition
qssgscenedesc.cpp:17
QSSGSceneDesc::listViewMetaType
Q_QUICK3DASSETUTILS_EXPORT QMetaType listViewMetaType()
Definition
qssgscenedesc.cpp:72
QSSGSceneDesc::destructNode
Q_QUICK3DASSETUTILS_EXPORT void destructNode(QSSGSceneDesc::Node &node)
Definition
qssgscenedesc.cpp:97
QSSGSceneDesc::destructValue
Q_QUICK3DASSETUTILS_EXPORT void destructValue(QVariant &value)
Definition
qssgscenedesc.cpp:77
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qstandardpaths_haiku.cpp:21
QT_END_NAMESPACE
Definition
qsharedpointer.cpp:1545
value
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
Definition
qeglstreamconvenience_p.h:46
qWarning
#define qWarning
Definition
qlogging.h:162
size
GLenum GLuint GLintptr GLsizeiptr size
[1]
Definition
qopengles2ext.h:660
index
GLuint index
[2]
Definition
qopengles2ext.h:331
flags
GLbitfield flags
Definition
qopengles2ext.h:1026
data
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
Definition
qopengles2ext.h:206
name
GLuint name
Definition
qopengles2ext.h:156
format
GLint GLsizei GLsizei GLenum format
Definition
qopengles2ext.h:206
Q_ASSERT
#define Q_ASSERT(cond)
Definition
qrandom.cpp:47
getNextNodeId
static quint16 getNextNodeId(QSSGSceneDesc::Scene &scene)
Definition
qssgscenedesc.cpp:11
qssgscenedesc_p.h
quint16
unsigned short quint16
Definition
qtypes.h:43
qsizetype
ptrdiff_t qsizetype
Definition
qtypes.h:70
quint8
unsigned char quint8
Definition
qtypes.h:41
fmt
QVideoFrameFormat::PixelFormat fmt
Definition
qv4l2camera.cpp:61
ch
char ch
Definition
src_corelib_io_qtextstream.cpp:30
scene
QGraphicsScene scene
[0]
Definition
src_gui_graphicsview_qgraphicsgridlayout.cpp:5
QSSGRenderGraphObject::isResource
static Q_REQUIRED_RESULT constexpr bool isResource(Type type) Q_DECL_NOTHROW
Definition
qssgrendergraphobject_p.h:119
QSSGRenderGraphObject::Type
Type
Definition
qssgrendergraphobject_p.h:46
QSSGSceneDesc::Camera
Definition
qssgscenedesc_p.h:241
QSSGSceneDesc::Joint
Definition
qssgscenedesc_p.h:275
QSSGSceneDesc::Joint::Joint
Joint()
Definition
qssgscenedesc.cpp:138
QSSGSceneDesc::Light
Definition
qssgscenedesc_p.h:248
QSSGSceneDesc::ListView
Definition
qssgscenedesc_p.h:291
QSSGSceneDesc::Material
Definition
qssgscenedesc_p.h:219
QSSGSceneDesc::Mesh
Definition
qssgscenedesc_p.h:228
QSSGSceneDesc::Model
Definition
qssgscenedesc_p.h:234
QSSGSceneDesc::Model::Model
Model()
Definition
qssgscenedesc.cpp:128
QSSGSceneDesc::MorphTarget
Definition
qssgscenedesc_p.h:282
QSSGSceneDesc::MorphTarget::MorphTarget
MorphTarget()
Definition
qssgscenedesc.cpp:140
QSSGSceneDesc::NodeList
Definition
qssgscenedesc_p.h:122
QSSGSceneDesc::Node
Definition
qssgscenedesc_p.h:136
QSSGSceneDesc::Node::id
quint16 id
Definition
qssgscenedesc_p.h:174
QSSGSceneDesc::Node::scene
Scene * scene
Definition
qssgscenedesc_p.h:168
QSSGSceneDesc::Node::runtimeType
RuntimeType runtimeType
Definition
qssgscenedesc_p.h:175
QSSGSceneDesc::Node::Type::Mesh
@ Mesh
QSSGSceneDesc::Node::Type::Camera
@ Camera
QSSGSceneDesc::Node::Type::Light
@ Light
QSSGSceneDesc::Node::Type::Texture
@ Texture
QSSGSceneDesc::Node::Type::Material
@ Material
QSSGSceneDesc::Node::cleanupChildren
void cleanupChildren()
Definition
qssgscenedesc.cpp:106
QSSGSceneDesc::Node::nodeType
Type nodeType
Definition
qssgscenedesc_p.h:176
QSSGSceneDesc::Node::~Node
virtual ~Node()
Definition
qssgscenedesc.cpp:104
QSSGSceneDesc::Node::properties
PropertyList properties
Definition
qssgscenedesc_p.h:173
QSSGSceneDesc::PropertyCall::get
virtual bool get(const QQuick3DObject &, const void *[]) const =0
Definition
qssgscenedesc.cpp:9
QSSGSceneDesc::PropertyCall::set
virtual bool set(QQuick3DObject &, const char *, const void *)=0
Definition
qssgscenedesc.cpp:8
QSSGSceneDesc::Property
Definition
qssgscenedesc_p.h:104
QSSGSceneDesc::Property::name
QByteArray name
Definition
qssgscenedesc_p.h:108
QSSGSceneDesc::Property::value
QVariant value
Definition
qssgscenedesc_p.h:107
QSSGSceneDesc::Property::call
QSSGSceneDesc::PropertyCall * call
Definition
qssgscenedesc_p.h:109
QSSGSceneDesc::Scene
Definition
qssgscenedesc_p.h:69
QSSGSceneDesc::Scene::resources
ResourceNodes resources
Definition
qssgscenedesc_p.h:77
QSSGSceneDesc::Scene::cleanup
void cleanup()
Definition
qssgscenedesc.cpp:49
QSSGSceneDesc::Scene::reset
void reset()
Definition
qssgscenedesc.cpp:40
QSSGSceneDesc::Skeleton
Definition
qssgscenedesc_p.h:262
QSSGSceneDesc::Skeleton::Skeleton
Skeleton()
Definition
qssgscenedesc.cpp:136
QSSGSceneDesc::Skin
Definition
qssgscenedesc_p.h:255
QSSGSceneDesc::Skin::Skin
Skin()
Definition
qssgscenedesc.cpp:134
QSSGSceneDesc::TextureData
Definition
qssgscenedesc_p.h:203
QSSGSceneDesc::TextureData::TextureData
TextureData(const QByteArray &textureData, QSize size, const QByteArray &format, quint8 flags=0, QByteArray name={})
Definition
qssgscenedesc.cpp:149
QSSGSceneDesc::Texture
Definition
qssgscenedesc_p.h:196
Type
Definition
moc.h:24
parent
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent
Definition
uiaclientinterfaces_p.h:209
qtquick3d
src
assetutils
qssgscenedesc.cpp
Generated by
1.9.7