diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-08-21 13:41:15 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-08-22 12:30:08 +0000 |
commit | f84228106e5302d68b51736ca69a6ca9ed98a869 (patch) | |
tree | 314879cd2aa7b7e2c9901e42297fca5473322355 /src/runtime/aping/q3dsstudio3dengine.cpp | |
parent | 189e49c1197720c52a2ef454a84ad9fb5ed4e4e2 (diff) |
Enable MSAA and SSAA for Layer3D
Change-Id: I26b8e731af7869199d7225263ac05bef42380df8
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
Diffstat (limited to 'src/runtime/aping/q3dsstudio3dengine.cpp')
-rw-r--r-- | src/runtime/aping/q3dsstudio3dengine.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/runtime/aping/q3dsstudio3dengine.cpp b/src/runtime/aping/q3dsstudio3dengine.cpp index f6cc16e..2234c5c 100644 --- a/src/runtime/aping/q3dsstudio3dengine.cpp +++ b/src/runtime/aping/q3dsstudio3dengine.cpp @@ -350,7 +350,9 @@ void Q3DSStudio3DEngine::updateViews() Renderer::Layer layer; layer.item = layerItem; layer.textureNodeId = nodeId; - layer.pixelSize = layer3DS->attached<Q3DSLayerAttached>()->layerSize; + Q3DSLayerAttached *layerData = layer3DS->attached<Q3DSLayerAttached>(); + layer.pixelSize = layerData->layerSize * layerData->ssaaScaleFactor; + layer.sampleCount = layerData->msaaSampleCount; layer.itemSizeWithoutDpr = layerItem->size().toSize(); layers.append(layer); } else { @@ -426,6 +428,11 @@ void Q3DSStudio3DEngine::Renderer::notifyEngineStart() m_engineStarted.store(1); } +static bool sampleCountEquals(int a, int b) +{ + return a == b || (a <= 1 && b <= 1); +} + void Q3DSStudio3DEngine::Renderer::render() { // m_engine may be destroyed already @@ -486,13 +493,17 @@ void Q3DSStudio3DEngine::Renderer::render() uint id = tex->textureId(); Q3DSLayer3DSGNode *viewNode = layer.item->node(); if (viewNode) { - if (uint(viewNode->texture()->textureId()) != id || viewNode->rect().size() != layer.itemSizeWithoutDpr) { + if (uint(viewNode->texture()->textureId()) != id + || viewNode->texture()->textureSize() != layer.pixelSize + || !sampleCountEquals(viewNode->sampleCount(), layer.sampleCount) + || viewNode->rect().size() != layer.itemSizeWithoutDpr) + { QSGTexture *t = w->createTextureFromId(id, layer.pixelSize, QQuickWindow::TextureHasAlphaChannel); Q_ASSERT(t); t->setFiltering(QSGTexture::Linear); - viewNode->setTexture(t); // owns, so previous texture is destroyed - layer.item->notifyTextureChange(t); + viewNode->setTexture(t, layer.sampleCount); // owns, so previous texture is destroyed + layer.item->notifyTextureChange(t, layer.sampleCount); viewNode->setRect(QRectF(QPointF(0, 0), layer.itemSizeWithoutDpr)); } |