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
qquick3dtexture_p.h
Go to the documentation of this file.
1// Copyright (C) 2019 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#ifndef QSSGIMAGE_H
7#define QSSGIMAGE_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include <QtQuick3D/qquick3dobject.h>
21#include <QtQuick3D/QQuick3DTextureData>
22#include <QtQuick/private/qquickitemchangelistener_p.h>
23#include <QtQuick/private/qsgadaptationlayer_p.h>
24#include <QtQuick/QQuickItem>
25#include <QtQuick/QSGNode>
26#include <QtCore/QUrl>
27#include <QtCore/QPointer>
28
30
31class QSGLayer;
32struct QSSGRenderImage;
33class QQuick3DRenderExtension;
34class QQuickWindow;
35
37{
38public:
39 enum class Type {
41 };
43};
44
45class Q_QUICK3D_EXPORT QQuick3DTexture : public QQuick3DObject, public QQuickItemChangeListener
46{
47 Q_OBJECT
48 Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
49 Q_PROPERTY(QQuickItem *sourceItem READ sourceItem WRITE setSourceItem NOTIFY sourceItemChanged)
50 Q_PROPERTY(QQuick3DTextureData *textureData READ textureData WRITE setTextureData NOTIFY textureDataChanged)
51 Q_PROPERTY(QQuick3DRenderExtension *textureProvider READ textureProvider WRITE setTextureProvider NOTIFY textureProviderChanged FINAL REVISION(6, 7))
52 Q_PROPERTY(float scaleU READ scaleU WRITE setScaleU NOTIFY scaleUChanged)
53 Q_PROPERTY(float scaleV READ scaleV WRITE setScaleV NOTIFY scaleVChanged)
54 Q_PROPERTY(MappingMode mappingMode READ mappingMode WRITE setMappingMode NOTIFY mappingModeChanged)
55 Q_PROPERTY(TilingMode tilingModeHorizontal READ horizontalTiling WRITE setHorizontalTiling NOTIFY horizontalTilingChanged)
56 Q_PROPERTY(TilingMode tilingModeVertical READ verticalTiling WRITE setVerticalTiling NOTIFY verticalTilingChanged)
57 Q_PROPERTY(TilingMode tilingModeDepth READ depthTiling WRITE setDepthTiling NOTIFY depthTilingChanged REVISION(6, 7))
58 Q_PROPERTY(float rotationUV READ rotationUV WRITE setRotationUV NOTIFY rotationUVChanged)
59 Q_PROPERTY(float positionU READ positionU WRITE setPositionU NOTIFY positionUChanged)
60 Q_PROPERTY(float positionV READ positionV WRITE setPositionV NOTIFY positionVChanged)
61 Q_PROPERTY(float pivotU READ pivotU WRITE setPivotU NOTIFY pivotUChanged)
62 Q_PROPERTY(float pivotV READ pivotV WRITE setPivotV NOTIFY pivotVChanged)
63 Q_PROPERTY(bool flipU READ flipU WRITE setFlipU NOTIFY flipUChanged)
64 Q_PROPERTY(bool flipV READ flipV WRITE setFlipV NOTIFY flipVChanged)
65 Q_PROPERTY(int indexUV READ indexUV WRITE setIndexUV NOTIFY indexUVChanged)
66 Q_PROPERTY(Filter magFilter READ magFilter WRITE setMagFilter NOTIFY magFilterChanged)
67 Q_PROPERTY(Filter minFilter READ minFilter WRITE setMinFilter NOTIFY minFilterChanged)
68 Q_PROPERTY(Filter mipFilter READ mipFilter WRITE setMipFilter NOTIFY mipFilterChanged)
69 Q_PROPERTY(bool generateMipmaps READ generateMipmaps WRITE setGenerateMipmaps NOTIFY generateMipmapsChanged)
70 Q_PROPERTY(bool autoOrientation READ autoOrientation WRITE setAutoOrientation NOTIFY autoOrientationChanged REVISION(6, 2))
71
72 QML_NAMED_ELEMENT(Texture)
73
74public:
75 enum MappingMode
76 {
77 UV = 0,
78 Environment = 1,
79 LightProbe = 2,
80 };
81 Q_ENUM(MappingMode)
82
83 enum TilingMode // must match QSSGRenderTextureCoordOp
84 {
85 ClampToEdge = 1,
86 MirroredRepeat,
87 Repeat
88 };
89 Q_ENUM(TilingMode)
90
91 enum Filter { // must match QSSGRenderTextureFilterOp
92 None = 0,
93 Nearest,
94 Linear
95 };
96 Q_ENUM(Filter)
97
98 explicit QQuick3DTexture(QQuick3DObject *parent = nullptr);
99 ~QQuick3DTexture() override;
100
101 QUrl source() const;
102 QQuickItem *sourceItem() const;
103 float scaleU() const;
104 float scaleV() const;
105 MappingMode mappingMode() const;
106 TilingMode horizontalTiling() const;
107 TilingMode verticalTiling() const;
108 Q_REVISION(6, 7) TilingMode depthTiling() const;
109 float rotationUV() const;
110 float positionU() const;
111 float positionV() const;
112 float pivotU() const;
113 float pivotV() const;
114 bool flipU() const;
115 bool flipV() const;
116 int indexUV() const;
117 Filter magFilter() const;
118 Filter minFilter() const;
119 Filter mipFilter() const;
120 QQuick3DTextureData *textureData() const;
121 bool generateMipmaps() const;
122 bool autoOrientation() const;
123
124 QSSGRenderImage *getRenderImage();
125
126 Q_REVISION(6, 7) QQuick3DRenderExtension *textureProvider() const;
127 Q_REVISION(6, 7) void setTextureProvider(QQuick3DRenderExtension *newRenderTexture);
128
129 bool hasSourceData() const
130 {
131 return !m_source.isEmpty() || m_sourceItem || m_textureData;
132 }
133
134public Q_SLOTS:
135 void setSource(const QUrl &source);
136 void setSourceItem(QQuickItem *sourceItem);
137 void setScaleU(float scaleU);
138 void setScaleV(float scaleV);
139 void setMappingMode(QQuick3DTexture::MappingMode mappingMode);
140 void setHorizontalTiling(QQuick3DTexture::TilingMode tilingModeHorizontal);
141 void setVerticalTiling(QQuick3DTexture::TilingMode tilingModeVertical);
142 Q_REVISION(6, 7) void setDepthTiling(QQuick3DTexture::TilingMode tilingModeDepth);
143 void setRotationUV(float rotationUV);
144 void setPositionU(float positionU);
145 void setPositionV(float positionV);
146 void setPivotU(float pivotU);
147 void setPivotV(float pivotV);
148 void setFlipU(bool flipU);
149 void setFlipV(bool flipV);
150 void setIndexUV(int indexUV);
151 void setMagFilter(QQuick3DTexture::Filter magFilter);
152 void setMinFilter(QQuick3DTexture::Filter minFilter);
153 void setMipFilter(QQuick3DTexture::Filter mipFilter);
154 void setTextureData(QQuick3DTextureData * textureData);
155 void setGenerateMipmaps(bool generateMipmaps);
156 void setAutoOrientation(bool autoOrientation);
157
158Q_SIGNALS:
159 void sourceChanged();
160 void sourceItemChanged();
161 void scaleUChanged();
162 void scaleVChanged();
163 void mappingModeChanged();
164 void horizontalTilingChanged();
165 void verticalTilingChanged();
166 Q_REVISION(6, 7) void depthTilingChanged();
167 void rotationUVChanged();
168 void positionUChanged();
169 void positionVChanged();
170 void pivotUChanged();
171 void pivotVChanged();
172 void flipUChanged();
173 void flipVChanged();
174 void indexUVChanged();
175 void magFilterChanged();
176 void minFilterChanged();
177 void mipFilterChanged();
178 void textureDataChanged();
179 void generateMipmapsChanged();
180 void autoOrientationChanged();
181 Q_REVISION(6, 7) void textureProviderChanged();
182 Q_REVISION(6, 12) void textureInternalChange(QQuick3DTextureInternalChange, QPrivateSignal);
183
184protected:
185 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
186 void markAllDirty() override;
187 void itemChange(ItemChange change, const ItemChangeData &value) override;
188
189 void itemGeometryChanged(QQuickItem *item, QQuickGeometryChange change, const QRectF &geometry) override;
190
191 explicit QQuick3DTexture(QQuick3DObjectPrivate &dd, QQuick3DObject *parent = nullptr);
192
193private Q_SLOTS:
194 void sourceItemDestroyed(QObject *item);
195 void sourceItemWindowChanged(QQuickWindow *window);
196
197private:
198 enum class DirtyFlag {
199 TransformDirty = (1 << 0),
200 SourceDirty = (1 << 1),
201 IndexUVDirty = (1 << 2),
202 TextureDataDirty = (1 << 3),
203 SamplerDirty = (1 << 4),
204 SourceItemDirty = (1 << 5),
205 FlipVDirty = (1 << 6),
206 ExtensionDirty = (1 << 7)
207 };
208 Q_DECLARE_FLAGS(DirtyFlags, DirtyFlag)
209 void markDirty(DirtyFlag type, bool requestSecondaryUpdate = false);
210 void trySetSourceParent();
211 bool effectiveFlipV(const QSSGRenderImage &imageNode) const;
212
213 QUrl m_source;
214 QQuickItem *m_sourceItem = nullptr;
215 bool m_sourceItemReparented = false;
216 bool m_sourceItemRefed = false;
217 QSGLayer *m_layer = nullptr;
218 float m_scaleU = 1.0f;
219 float m_scaleV = 1.0f;
220 MappingMode m_mappingMode = UV;
221 TilingMode m_tilingModeHorizontal = Repeat;
222 TilingMode m_tilingModeVertical = Repeat;
223 TilingMode m_tilingModeDepth = Repeat;
224 float m_rotationUV = 0;
225 float m_positionU = 0;
226 float m_positionV = 0;
227 float m_pivotU = 0;
228 float m_pivotV = 0;
229 bool m_flipU = false;
230 bool m_flipV = false;
231 int m_indexUV = 0;
232 Filter m_magFilter = Linear;
233 Filter m_minFilter = Linear;
234 Filter m_mipFilter = None;
235 DirtyFlags m_dirtyFlags = DirtyFlags(DirtyFlag::TransformDirty)
236 | DirtyFlags(DirtyFlag::SourceDirty)
237 | DirtyFlags(DirtyFlag::IndexUVDirty)
238 | DirtyFlags(DirtyFlag::TextureDataDirty);
239 QMetaObject::Connection m_textureProviderConnection;
240 QMetaObject::Connection m_textureUpdateConnection;
241 QQuick3DSceneManager *m_sceneManagerForLayer = nullptr;
242 QMetaObject::Connection m_sceneManagerWindowChangeConnection;
243 QQuickItem *m_initializedSourceItem = nullptr;
244 QSizeF m_initializedSourceItemSize;
245 QHash<QByteArray, QMetaObject::Connection> m_connections;
246 QMetaObject::Connection m_textureDataConnection;
247 QQuick3DTextureData *m_textureData = nullptr;
248 bool m_generateMipmaps = false;
249 bool m_autoOrientation = true;
250 QQuick3DRenderExtension *m_renderExtension = nullptr;
251};
252
253QT_END_NAMESPACE
254
255#endif // QSSGIMAGE_H
Combined button and popup list for selecting options.