summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2018-05-28 15:44:25 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2018-05-29 08:23:58 +0000
commit162b0ee2525ee72259b04bfa5158afb22147585a (patch)
tree7e9dc02e6764f81981fb2d0fe853cf7b4c9cdc19
parent9d89536db50d7cf5fe873e94053f61baa9dd293a (diff)
Tentative fix for adv.blend mode layers with center/fit scale mode
Problem is, it is still slightly off with certain window sizes. Task-number: QT3DS-1801 Change-Id: I10bf8db388c191efb2115284ca51d812f7fa946a Reviewed-by: Andy Nichols <andy.nichols@qt.io>
-rw-r--r--src/runtime/q3dsscenemanager.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/runtime/q3dsscenemanager.cpp b/src/runtime/q3dsscenemanager.cpp
index 22b51b2..c664267 100644
--- a/src/runtime/q3dsscenemanager.cpp
+++ b/src/runtime/q3dsscenemanager.cpp
@@ -326,7 +326,7 @@ static const int LAYER_CACHING_THRESHOLD = 4;
LayerFilter {
Layer { id: compositorTag }
layers: [ compositorTag ]
- ...
+ ... // see buildCompositor()
}
// Profiling gui framegraph (once only, not included again for subpresentations)
@@ -429,7 +429,7 @@ static const int LAYER_CACHING_THRESHOLD = 4;
}
]
- Compute pass for texture prefiltering is provided as a separate technique with "type" == "bsdfPrefilter".
+ Compute pass for texture prefiltering is provided as a separate technique with "type" == "bsdfPrefilter". [not implemented]
*/
@@ -479,9 +479,9 @@ void Q3DSSceneManager::updateSizes(const QSize &size, qreal dpr, const QRect &vi
normalizedViewport = QRectF(0, 0, 1, 1);
else
normalizedViewport = QRectF(viewport.x() / qreal(size.width()),
- viewport.y() / qreal(size.height()),
- viewport.width() / qreal(size.width()),
- viewport.height() / qreal(size.height()));
+ viewport.y() / qreal(size.height()),
+ viewport.width() / qreal(size.width()),
+ viewport.height() / qreal(size.height()));
if (m_viewportData.viewport)
m_viewportData.viewport->setNormalizedRect(normalizedViewport);
@@ -3291,7 +3291,9 @@ void Q3DSSceneManager::updateLayerCompositorProgram(Q3DSLayerNode *layer3DS)
void Q3DSSceneManager::buildCompositor(Qt3DRender::QFrameGraphNode *parent, Qt3DCore::QEntity *parentEntity)
{
// Simplified view (excluding advanced blending-specific nodes):
- // Viewport - CameraSelector - ClearBuffers - NoDraw
+ // MatteRoot - NoDraw
+ // - [Clear - NoDraw]
+ // Viewport - CameraSelector - [Scissor] - ClearBuffers - NoDraw
// - LayerFilter for layer quad entity 0
// - LayerFilter for layer quad entity 1
// ...
@@ -3433,15 +3435,17 @@ void Q3DSSceneManager::buildCompositor(Qt3DRender::QFrameGraphNode *parent, Qt3D
new Qt3DRender::QNoDraw(bgBlit);
// Layer size dependent properties have to be updated dynamically.
- auto setSizeDependentValues = [bgBlit, layer3DS, data](Q3DSLayerNode *changedLayer) {
+ auto setSizeDependentValues = [bgBlit, layer3DS, data, this](Q3DSLayerNode *changedLayer) {
if (changedLayer != layer3DS)
return;
if (data->layerSize.isEmpty())
return;
+ const QPointF pos = data->layerPos + m_viewportData.viewportRect.topLeft() * m_viewportData.viewportDpr;
+
// this assumes QTBUG-65123 is fixed
- QRectF srcRect(data->layerPos, data->layerSize);
+ QRectF srcRect(pos, data->layerSize);
bgBlit->setSourceRect(srcRect);
QRectF dstRect(QPointF(0, 0), data->layerSize);
bgBlit->setDestinationRect(dstRect);