34class Q_QUICK3D_EXPORT
QQuick3DTexture :
public QQuick3DObject,
public QQuickItemChangeListener
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))
61 QML_NAMED_ELEMENT(Texture)
87 explicit QQuick3DTexture(QQuick3DObject *parent =
nullptr);
88 ~QQuick3DTexture() override;
91 QQuickItem *sourceItem()
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;
106 Filter magFilter()
const;
107 Filter minFilter()
const;
108 Filter mipFilter()
const;
109 QQuick3DTextureData *textureData()
const;
110 bool generateMipmaps()
const;
111 bool autoOrientation()
const;
113 QSSGRenderImage *getRenderImage();
115 Q_REVISION(6, 7) QQuick3DRenderExtension *textureProvider()
const;
116 Q_REVISION(6, 7)
void setTextureProvider(QQuick3DRenderExtension *newRenderTexture);
118 bool extensionDirty()
const {
return m_dirtyFlags.testFlag(DirtyFlag::ExtensionDirty); }
120 bool hasSourceData()
const
122 return !m_source.isEmpty() || m_sourceItem || m_textureData;
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);
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();
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();
175 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
176 void markAllDirty() override;
177 void itemChange(ItemChange change,
const ItemChangeData &value) override;
179 void itemGeometryChanged(QQuickItem *item, QQuickGeometryChange change,
const QRectF &geometry) override;
181 explicit QQuick3DTexture(QQuick3DObjectPrivate &dd, QQuick3DObject *parent =
nullptr);
184 void sourceItemDestroyed(QObject *item);
185 void sourceItemWindowChanged(QQuickWindow *window);
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)
198 Q_DECLARE_FLAGS(DirtyFlags, DirtyFlag)
199 void markDirty(DirtyFlag type);
200 void trySetSourceParent();
201 bool effectiveFlipV(
const QSSGRenderImage &imageNode)
const;
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;
219 bool m_flipU =
false;
220 bool m_flipV =
false;
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;