Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qssgrenderimage.cpp
Go to the documentation of this file.
1// Copyright (C) 2008-2012 NVIDIA Corporation.
2// Copyright (C) 2019 The Qt Company Ltd.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
4// Qt-Security score:significant reason:default
5
6
7#include <QtQuick3DRuntimeRender/private/qssgrenderimage_p.h>
8#include <QtQuick/QSGTexture>
9
10QT_BEGIN_NAMESPACE
11
12QSSGRenderImage::QSSGRenderImage(QSSGRenderGraphObject::Type type)
13 : QSSGRenderGraphObject(type, FlagT(QSSGRenderGraphObject::Flags::HasGraphicsResources))
14{
15 m_flags.setFlag(Flag::Dirty);
16 m_flags.setFlag(Flag::TransformDirty);
17}
18
19QSSGRenderImage::~QSSGRenderImage() = default;
20
21bool QSSGRenderImage::clearDirty()
22{
23 const bool wasDirty = m_flags.testFlag(Flag::Dirty);
24 m_flags.setFlag(Flag::Dirty, false);
25 if (m_flags.testFlag(Flag::TransformDirty)) {
26 calculateTextureTransform();
27 return true;
28 }
29 return wasDirty;
30}
31
32void QSSGRenderImage::calculateTextureTransform()
33{
34 m_flags.setFlag(Flag::TransformDirty, false);
35
36 m_textureTransform = QMatrix4x4();
37 if (m_flipU) {
38 m_textureTransform *= QMatrix4x4(-1.f, 0.f, 0.f, 1.f,
39 0.f, 1.f, 0.f, 0.f,
40 0.f, 0.f, 1.f, 0.f,
41 0.f, 0.f, 0.f, 1.f);
42 }
43 if (m_flipV) {
44 m_textureTransform *= QMatrix4x4(1.f, 0.f, 0.f, 0.f,
45 0.f, -1.f, 0.f, 1.f,
46 0.f, 0.f, 1.f, 0.f,
47 0.f, 0.f, 0.f, 1.f);
48 }
49
50 QMatrix4x4 pivot;
51 QMatrix4x4 pivot_r;
52 QMatrix4x4 translation;
53 QMatrix4x4 rotation;
54 QMatrix4x4 scale;
55
56 pivot.translate(m_pivot.x(), m_pivot.y());
57 pivot_r.translate(-m_pivot.x(), -m_pivot.y());
58 translation.translate(m_position.x(), m_position.y());
59 scale.scale(m_scale.x(), m_scale.y());
60 rotation.rotate(m_rotation, QVector3D(0, 0, 1));
61
62 m_textureTransform *= translation;
63 m_textureTransform *= pivot;
64 m_textureTransform *= rotation;
65 m_textureTransform *= scale;
66 m_textureTransform *= pivot_r;
67}
68
69bool QSSGRenderImage::isImageTransformIdentity() const
70{
71 if (m_mappingMode != MappingModes::Normal)
72 return false;
73 return m_textureTransform.isIdentity();
74}
75
76QT_END_NAMESPACE