summaryrefslogtreecommitdiffstats
path: root/src/runtime/aping/q3dsstudio3dengine.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2018-08-21 13:41:15 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2018-08-22 12:30:08 +0000
commitf84228106e5302d68b51736ca69a6ca9ed98a869 (patch)
tree314879cd2aa7b7e2c9901e42297fca5473322355 /src/runtime/aping/q3dsstudio3dengine.cpp
parent189e49c1197720c52a2ef454a84ad9fb5ed4e4e2 (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.cpp19
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));
}