aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickgenericshadereffect.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@theqtcompany.com>2016-04-29 13:27:02 +0200
committerAndy Nichols <andy.nichols@qt.io>2016-04-30 20:22:20 +0000
commitdc5b2fd31ccf36f5f6e0ec3a7222bda023c6b1eb (patch)
tree72900fdd6fc301a72ec7cc527d64cf456212acc3 /src/quick/items/qquickgenericshadereffect.cpp
parent5568a79fdd742761bae660137b3e6d4795100ff0 (diff)
D3D12: qt_SubRect_<name> support
Change-Id: I2b5d1211ed97909a03d92d115eb057ce9e710d12 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/quick/items/qquickgenericshadereffect.cpp')
-rw-r--r--src/quick/items/qquickgenericshadereffect.cpp30
1 files changed, 14 insertions, 16 deletions
diff --git a/src/quick/items/qquickgenericshadereffect.cpp b/src/quick/items/qquickgenericshadereffect.cpp
index c6b90e3499..cad3520ed1 100644
--- a/src/quick/items/qquickgenericshadereffect.cpp
+++ b/src/quick/items/qquickgenericshadereffect.cpp
@@ -272,7 +272,18 @@ QSGNode *QQuickGenericShaderEffect::handleUpdatePaintNode(QSGNode *oldNode, QQui
m_dirty = QSGShaderEffectNode::DirtyShaderAll;
}
- // Dirty mesh and geometry are handled here, the rest is passed on to the node.
+ QSGShaderEffectNode::SyncData sd;
+ sd.dirty = m_dirty;
+ sd.cullMode = QSGShaderEffectNode::CullMode(m_cullMode);
+ sd.blending = m_blending;
+ sd.vertex.shader = &m_shaders[Vertex];
+ sd.vertex.dirtyConstants = &m_dirtyConstants[Vertex];
+ sd.vertex.dirtyTextures = &m_dirtyTextures[Vertex];
+ sd.fragment.shader = &m_shaders[Fragment];
+ sd.fragment.dirtyConstants = &m_dirtyConstants[Fragment];
+ sd.fragment.dirtyTextures = &m_dirtyTextures[Fragment];
+ node->syncMaterial(&sd);
+
if (m_dirty & QSGShaderEffectNode::DirtyShaderMesh) {
node->setGeometry(nullptr);
m_dirty &= ~QSGShaderEffectNode::DirtyShaderMesh;
@@ -284,7 +295,8 @@ QSGNode *QQuickGenericShaderEffect::handleUpdatePaintNode(QSGNode *oldNode, QQui
QQuickShaderEffectMesh *mesh = m_mesh ? m_mesh : &m_defaultMesh;
QSGGeometry *geometry = node->geometry();
- geometry = mesh->updateGeometry(geometry, 2, 0, node->normalizedTextureSubRect(), rect);
+ const QRectF srcRect = node->updateNormalizedTextureSubRect(m_supportsAtlasTextures);
+ geometry = mesh->updateGeometry(geometry, 2, 0, srcRect, rect);
node->setFlag(QSGNode::OwnsGeometry, false);
node->setGeometry(geometry);
@@ -293,20 +305,6 @@ QSGNode *QQuickGenericShaderEffect::handleUpdatePaintNode(QSGNode *oldNode, QQui
m_dirty &= ~QSGShaderEffectNode::DirtyShaderGeometry;
}
- QSGShaderEffectNode::SyncData sd;
- sd.dirty = m_dirty;
- sd.cullMode = QSGShaderEffectNode::CullMode(m_cullMode);
- sd.blending = m_blending;
- sd.supportsAtlasTextures = m_supportsAtlasTextures;
- sd.vertex.shader = &m_shaders[Vertex];
- sd.vertex.dirtyConstants = &m_dirtyConstants[Vertex];
- sd.vertex.dirtyTextures = &m_dirtyTextures[Vertex];
- sd.fragment.shader = &m_shaders[Fragment];
- sd.fragment.dirtyConstants = &m_dirtyConstants[Fragment];
- sd.fragment.dirtyTextures = &m_dirtyTextures[Fragment];
-
- node->sync(&sd);
-
m_dirty = 0;
for (int i = 0; i < NShader; ++i) {
m_dirtyConstants[i].clear();