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