33class Q_QUICK3D_EXPORT
QQuick3DTexture :
public QQuick3DObject,
public QQuickItemChangeListener
36 Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
37 Q_PROPERTY(QQuickItem *sourceItem READ sourceItem WRITE setSourceItem NOTIFY sourceItemChanged)
38 Q_PROPERTY(QQuick3DTextureData *textureData READ textureData WRITE setTextureData NOTIFY textureDataChanged)
39 Q_PROPERTY(QQuick3DRenderExtension *textureProvider READ textureProvider WRITE setTextureProvider NOTIFY textureProviderChanged FINAL REVISION(6, 7))
40 Q_PROPERTY(
float scaleU READ scaleU WRITE setScaleU NOTIFY scaleUChanged)
41 Q_PROPERTY(
float scaleV READ scaleV WRITE setScaleV NOTIFY scaleVChanged)
42 Q_PROPERTY(MappingMode mappingMode READ mappingMode WRITE setMappingMode NOTIFY mappingModeChanged)
43 Q_PROPERTY(TilingMode tilingModeHorizontal READ horizontalTiling WRITE setHorizontalTiling NOTIFY horizontalTilingChanged)
44 Q_PROPERTY(TilingMode tilingModeVertical READ verticalTiling WRITE setVerticalTiling NOTIFY verticalTilingChanged)
45 Q_PROPERTY(TilingMode tilingModeDepth READ depthTiling WRITE setDepthTiling NOTIFY depthTilingChanged REVISION(6, 7))
46 Q_PROPERTY(
float rotationUV READ rotationUV WRITE setRotationUV NOTIFY rotationUVChanged)
47 Q_PROPERTY(
float positionU READ positionU WRITE setPositionU NOTIFY positionUChanged)
48 Q_PROPERTY(
float positionV READ positionV WRITE setPositionV NOTIFY positionVChanged)
49 Q_PROPERTY(
float pivotU READ pivotU WRITE setPivotU NOTIFY pivotUChanged)
50 Q_PROPERTY(
float pivotV READ pivotV WRITE setPivotV NOTIFY pivotVChanged)
51 Q_PROPERTY(
bool flipU READ flipU WRITE setFlipU NOTIFY flipUChanged)
52 Q_PROPERTY(
bool flipV READ flipV WRITE setFlipV NOTIFY flipVChanged)
53 Q_PROPERTY(
int indexUV READ indexUV WRITE setIndexUV NOTIFY indexUVChanged)
54 Q_PROPERTY(Filter magFilter READ magFilter WRITE setMagFilter NOTIFY magFilterChanged)
55 Q_PROPERTY(Filter minFilter READ minFilter WRITE setMinFilter NOTIFY minFilterChanged)
56 Q_PROPERTY(Filter mipFilter READ mipFilter WRITE setMipFilter NOTIFY mipFilterChanged)
57 Q_PROPERTY(
bool generateMipmaps READ generateMipmaps WRITE setGenerateMipmaps NOTIFY generateMipmapsChanged)
58 Q_PROPERTY(
bool autoOrientation READ autoOrientation WRITE setAutoOrientation NOTIFY autoOrientationChanged REVISION(6, 2))
60 QML_NAMED_ELEMENT(Texture)
86 explicit QQuick3DTexture(QQuick3DObject *parent =
nullptr);
87 ~QQuick3DTexture() override;
90 QQuickItem *sourceItem()
const;
93 MappingMode mappingMode()
const;
94 TilingMode horizontalTiling()
const;
95 TilingMode verticalTiling()
const;
96 Q_REVISION(6, 7) TilingMode depthTiling()
const;
97 float rotationUV()
const;
98 float positionU()
const;
99 float positionV()
const;
100 float pivotU()
const;
101 float pivotV()
const;
105 Filter magFilter()
const;
106 Filter minFilter()
const;
107 Filter mipFilter()
const;
108 QQuick3DTextureData *textureData()
const;
109 bool generateMipmaps()
const;
110 bool autoOrientation()
const;
112 QSSGRenderImage *getRenderImage();
114 Q_REVISION(6, 7) QQuick3DRenderExtension *textureProvider()
const;
115 Q_REVISION(6, 7)
void setTextureProvider(QQuick3DRenderExtension *newRenderTexture);
117 bool extensionDirty()
const {
return m_dirtyFlags.testFlag(DirtyFlag::ExtensionDirty); }
119 bool hasSourceData()
const
121 return !m_source.isEmpty() || m_sourceItem || m_textureData;
125 void setSource(
const QUrl &source);
126 void setSourceItem(QQuickItem *sourceItem);
127 void setScaleU(
float scaleU);
128 void setScaleV(
float scaleV);
129 void setMappingMode(QQuick3DTexture::MappingMode mappingMode);
130 void setHorizontalTiling(QQuick3DTexture::TilingMode tilingModeHorizontal);
131 void setVerticalTiling(QQuick3DTexture::TilingMode tilingModeVertical);
132 Q_REVISION(6, 7)
void setDepthTiling(QQuick3DTexture::TilingMode tilingModeDepth);
133 void setRotationUV(
float rotationUV);
134 void setPositionU(
float positionU);
135 void setPositionV(
float positionV);
136 void setPivotU(
float pivotU);
137 void setPivotV(
float pivotV);
138 void setFlipU(
bool flipU);
139 void setFlipV(
bool flipV);
140 void setIndexUV(
int indexUV);
141 void setMagFilter(QQuick3DTexture::Filter magFilter);
142 void setMinFilter(QQuick3DTexture::Filter minFilter);
143 void setMipFilter(QQuick3DTexture::Filter mipFilter);
144 void setTextureData(QQuick3DTextureData * textureData);
145 void setGenerateMipmaps(
bool generateMipmaps);
146 void setAutoOrientation(
bool autoOrientation);
149 void sourceChanged();
150 void sourceItemChanged();
151 void scaleUChanged();
152 void scaleVChanged();
153 void mappingModeChanged();
154 void horizontalTilingChanged();
155 void verticalTilingChanged();
156 Q_REVISION(6, 7)
void depthTilingChanged();
157 void rotationUVChanged();
158 void positionUChanged();
159 void positionVChanged();
160 void pivotUChanged();
161 void pivotVChanged();
164 void indexUVChanged();
165 void magFilterChanged();
166 void minFilterChanged();
167 void mipFilterChanged();
168 void textureDataChanged();
169 void generateMipmapsChanged();
170 void autoOrientationChanged();
171 Q_REVISION(6, 7)
void textureProviderChanged();
174 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
175 void markAllDirty() override;
176 void itemChange(ItemChange change,
const ItemChangeData &value) override;
178 void itemGeometryChanged(QQuickItem *item, QQuickGeometryChange change,
const QRectF &geometry) override;
180 explicit QQuick3DTexture(QQuick3DObjectPrivate &dd, QQuick3DObject *parent =
nullptr);
183 void sourceItemDestroyed(QObject *item);
186 enum class DirtyFlag {
187 TransformDirty = (1 << 0),
188 SourceDirty = (1 << 1),
189 IndexUVDirty = (1 << 2),
190 TextureDataDirty = (1 << 3),
191 SamplerDirty = (1 << 4),
192 SourceItemDirty = (1 << 5),
193 FlipVDirty = (1 << 6),
194 ExtensionDirty = (1 << 7)
196 Q_DECLARE_FLAGS(DirtyFlags, DirtyFlag)
197 void markDirty(DirtyFlag type);
198 void trySetSourceParent();
199 bool effectiveFlipV(
const QSSGRenderImage &imageNode)
const;
202 QQuickItem *m_sourceItem =
nullptr;
203 bool m_sourceItemReparented =
false;
204 bool m_sourceItemRefed =
false;
205 QSGLayer *m_layer =
nullptr;
206 float m_scaleU = 1.0f;
207 float m_scaleV = 1.0f;
208 MappingMode m_mappingMode = UV;
209 TilingMode m_tilingModeHorizontal = Repeat;
210 TilingMode m_tilingModeVertical = Repeat;
211 TilingMode m_tilingModeDepth = Repeat;
212 float m_rotationUV = 0;
213 float m_positionU = 0;
214 float m_positionV = 0;
217 bool m_flipU =
false;
218 bool m_flipV =
false;
220 Filter m_magFilter = Linear;
221 Filter m_minFilter = Linear;
222 Filter m_mipFilter = None;
223 DirtyFlags m_dirtyFlags = DirtyFlags(DirtyFlag::TransformDirty)
224 | DirtyFlags(DirtyFlag::SourceDirty)
225 | DirtyFlags(DirtyFlag::IndexUVDirty)
226 | DirtyFlags(DirtyFlag::TextureDataDirty);
227 QMetaObject::Connection m_textureProviderConnection;
228 QMetaObject::Connection m_textureUpdateConnection;
229 QQuick3DSceneManager *m_sceneManagerForLayer =
nullptr;
230 QMetaObject::Connection m_sceneManagerWindowChangeConnection;
231 QQuickItem *m_initializedSourceItem =
nullptr;
232 QSizeF m_initializedSourceItemSize;
233 QHash<QByteArray, QMetaObject::Connection> m_connections;
234 QMetaObject::Connection m_textureDataConnection;
235 QQuick3DTextureData *m_textureData =
nullptr;
236 bool m_generateMipmaps =
false;
237 bool m_autoOrientation =
true;
238 QQuick3DRenderExtension *m_renderExtension =
nullptr;