diff options
author | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2016-04-29 13:27:02 +0200 |
---|---|---|
committer | Andy Nichols <andy.nichols@qt.io> | 2016-04-30 20:22:20 +0000 |
commit | dc5b2fd31ccf36f5f6e0ec3a7222bda023c6b1eb (patch) | |
tree | 72900fdd6fc301a72ec7cc527d64cf456212acc3 /src/quick/items | |
parent | 5568a79fdd742761bae660137b3e6d4795100ff0 (diff) |
D3D12: qt_SubRect_<name> support
Change-Id: I2b5d1211ed97909a03d92d115eb057ce9e710d12
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/quick/items')
-rw-r--r-- | src/quick/items/qquickgenericshadereffect.cpp | 30 |
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(); |