1// Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB).
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "scene3dsgnode_p.h"
5
6#include <QtCore/qthread.h>
7
8#include <scene3dlogging_p.h>
9
10QT_BEGIN_NAMESPACE
11
12namespace Qt3DRender {
13
14/*!
15 \class Qt3DCore::Scene3DSGNode
16 \internal
17
18 \brief The Qt3DCore::Scene3DSGNode class is a simple QSGeometryNode subclass that
19 uses a Qt3DCore::Scene3DMaterial
20
21 The Qt3DCore::Scene3DSGNode allows to render a simple rectangle textured with a
22 texture using premultiplied alpha.
23 */
24Scene3DSGNode::Scene3DSGNode()
25 : QSGGeometryNode()
26 , m_geometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4)
27{
28 setMaterial(&m_material);
29 setOpaqueMaterial(&m_opaqueMaterial);
30 setGeometry(&m_geometry);
31 qCDebug(Scene3D) << Q_FUNC_INFO << QThread::currentThread();
32}
33
34Scene3DSGNode::~Scene3DSGNode()
35{
36 qCDebug(Scene3D) << Q_FUNC_INFO << QThread::currentThread();
37 // The Scene3DSGNode is deleted by the QSGRenderThread when the SceneGraph
38 // is terminated.
39}
40
41void Scene3DSGNode::setRect(const QRectF &rect, bool mirrorVertically)
42{
43 if (rect != m_rect) {
44 m_rect = rect;
45 // By default, map the item's bounding rect to normalized texture coordinates
46
47 QRectF textureRect = QRectF(0.0f, 1.0f, 1.0f, -1.0f);
48 if (mirrorVertically) {
49 float tmp = textureRect.top();
50 textureRect.setTop(textureRect.bottom());
51 textureRect.setBottom(tmp);
52 }
53
54 QSGGeometry::updateTexturedRectGeometry(g: &m_geometry, rect: m_rect, sourceRect: textureRect);
55 markDirty(bits: DirtyGeometry);
56 }
57}
58
59void Scene3DSGNode::show()
60{
61 m_material.show();
62 m_opaqueMaterial.show();
63}
64
65} // namespace Qt3DRender
66
67QT_END_NAMESPACE
68

source code of qt3d/src/quick3d/imports/scene3d/scene3dsgnode.cpp