45class Q_QUICK3D_EXPORT
QQuick3DTexture :
public QQuick3DObject,
public QQuickItemChangeListener
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))
72 QML_NAMED_ELEMENT(Texture)
98 explicit QQuick3DTexture(QQuick3DObject *parent =
nullptr);
99 ~QQuick3DTexture() override;
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;
117 Filter magFilter()
const;
118 Filter minFilter()
const;
119 Filter mipFilter()
const;
120 QQuick3DTextureData *textureData()
const;
121 bool generateMipmaps()
const;
122 bool autoOrientation()
const;
124 QSSGRenderImage *getRenderImage();
126 Q_REVISION(6, 7) QQuick3DRenderExtension *textureProvider()
const;
127 Q_REVISION(6, 7)
void setTextureProvider(QQuick3DRenderExtension *newRenderTexture);
129 bool hasSourceData()
const
131 return !m_source.isEmpty() || m_sourceItem || m_textureData;
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);
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();
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);
185 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
186 void markAllDirty() override;
187 void itemChange(ItemChange change,
const ItemChangeData &value) override;
189 void itemGeometryChanged(QQuickItem *item, QQuickGeometryChange change,
const QRectF &geometry) override;
191 explicit QQuick3DTexture(QQuick3DObjectPrivate &dd, QQuick3DObject *parent =
nullptr);
194 void sourceItemDestroyed(QObject *item);
195 void sourceItemWindowChanged(QQuickWindow *window);
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)
208 Q_DECLARE_FLAGS(DirtyFlags, DirtyFlag)
209 void markDirty(DirtyFlag type,
bool requestSecondaryUpdate =
false);
210 void trySetSourceParent();
211 bool effectiveFlipV(
const QSSGRenderImage &imageNode)
const;
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;
229 bool m_flipU =
false;
230 bool m_flipV =
false;
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;