29 QSGSimpleTextureNode::TextureCoordinatesTransformMode texCoordMode)
34 if (!sourceRect.width() || !sourceRect.height()) {
35 QSize ts = texture->textureSize();
36 sourceRect = QRectF(0, 0, ts.width(), ts.height());
40 if (texCoordMode.testFlag(QSGSimpleTextureNode::MirrorHorizontally)) {
41 float tmp = sourceRect.left();
42 sourceRect.setLeft(sourceRect.right());
43 sourceRect.setRight(tmp);
45 if (texCoordMode.testFlag(QSGSimpleTextureNode::MirrorVertically)) {
46 float tmp = sourceRect.top();
47 sourceRect.setTop(sourceRect.bottom());
48 sourceRect.setBottom(tmp);
51 QSGGeometry::updateTexturedRectGeometry(g, rect, texture->convertToNormalizedSourceRect(sourceRect));
74QSGSimpleTextureNode::QSGSimpleTextureNode()
75 : QSGGeometryNode(*
new QSGSimpleTextureNodePrivate)
76 , m_geometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4)
78 setGeometry(&m_geometry);
79 setMaterial(&m_material);
80 setOpaqueMaterial(&m_opaque_material);
81 m_material.setMipmapFiltering(QSGTexture::None);
82 m_opaque_material.setMipmapFiltering(QSGTexture::None);
83#ifdef QSG_RUNTIME_DESCRIPTION
84 qsgnode_set_description(
this, QLatin1String(
"simpletexture"));
104void QSGSimpleTextureNode::setFiltering(QSGTexture::Filtering filtering)
106 if (m_material.filtering() == filtering)
109 m_material.setFiltering(filtering);
110 m_opaque_material.setFiltering(filtering);
111 markDirty(DirtyMaterial);
127void QSGSimpleTextureNode::setRect(
const QRectF &r)
132 Q_D(QSGSimpleTextureNode);
133 qsgsimpletexturenode_update(&m_geometry, texture(), m_rect, d->sourceRect, d->texCoordMode);
134 markDirty(DirtyGeometry);
158void QSGSimpleTextureNode::setSourceRect(
const QRectF &r)
160 Q_D(QSGSimpleTextureNode);
161 if (d->sourceRect == r)
164 qsgsimpletexturenode_update(&m_geometry, texture(), m_rect, d->sourceRect, d->texCoordMode);
165 markDirty(DirtyGeometry);
198void QSGSimpleTextureNode::setTexture(QSGTexture *texture)
201 Q_D(QSGSimpleTextureNode);
203 delete m_material.texture();
204 m_material.setTexture(texture);
205 m_opaque_material.setTexture(texture);
206 qsgsimpletexturenode_update(&m_geometry, texture, m_rect, d->sourceRect, d->texCoordMode);
208 DirtyState dirty = DirtyMaterial;
212 bool wasAtlas = d->isAtlasTexture;
213 d->isAtlasTexture = texture->isAtlasTexture();
214 if (wasAtlas || d->isAtlasTexture)
215 dirty |= DirtyGeometry;
252void QSGSimpleTextureNode::setTextureCoordinatesTransform(QSGSimpleTextureNode::TextureCoordinatesTransformMode mode)
254 Q_D(QSGSimpleTextureNode);
255 if (d->texCoordMode == mode)
257 d->texCoordMode = mode;
258 qsgsimpletexturenode_update(&m_geometry, texture(), m_rect, d->sourceRect, d->texCoordMode);
259 markDirty(DirtyGeometry | DirtyMaterial);
static void qsgsimpletexturenode_update(QSGGeometry *g, QSGTexture *texture, const QRectF &rect, QRectF sourceRect, QSGSimpleTextureNode::TextureCoordinatesTransformMode texCoordMode)