aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaj Grönholm <kaj.gronholm@qt.io>2020-11-11 10:08:45 +0200
committerKaj Grönholm <kaj.gronholm@qt.io>2020-11-12 13:42:58 +0200
commit88119bd35aa578ca8d2eafb6d2921ac1b7bb2a56 (patch)
treec016b6f5be6023eb797fa02697c41cdb809b8d6d
parent54d4f8f526f9c9a1af702b14925e1d34ee8b2134 (diff)
Take pixel ratio into account with point particles
Particles using DrawTriangles are taking pixel ratio into account, while particles using DrawPoints used raw pixel sizes. Change points to also scale based on dpr. This way particles with different backends and performance levels remain the same size. Task-number: QTBUG-88240 Change-Id: I3988a0ad8e741626a56a41b08aed0500e5be0c62 Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
-rw-r--r--src/particles/qquickimageparticle.cpp12
-rw-r--r--src/particles/qquickimageparticle_p.h1
-rw-r--r--src/particles/shaders_ng/imageparticle.frag1
-rw-r--r--src/particles/shaders_ng/imageparticle.vert3
-rw-r--r--src/particles/shaders_ng/imageparticle_colored.frag.qsbbin1644 -> 1676 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_colored.vert.qsbbin3995 -> 4026 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsbbin1634 -> 1663 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsbbin3425 -> 3526 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_deformed.frag.qsbbin1645 -> 1689 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_deformed.vert.qsbbin5333 -> 5389 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_simplepoint.frag.qsbbin1637 -> 1655 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_simplepoint.vert.qsbbin3457 -> 3474 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_sprite.frag.qsbbin1962 -> 1988 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_sprite.vert.qsbbin6032 -> 6028 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_tabled.frag.qsbbin1837 -> 1875 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_tabled.vert.qsbbin5670 -> 5694 bytes
16 files changed, 16 insertions, 1 deletions
diff --git a/src/particles/qquickimageparticle.cpp b/src/particles/qquickimageparticle.cpp
index 2b03d7889a..643194c8d5 100644
--- a/src/particles/qquickimageparticle.cpp
+++ b/src/particles/qquickimageparticle.cpp
@@ -79,6 +79,7 @@ class ImageMaterialData
float sizeTable[UNIFORM_ARRAY_SIZE];
float opacityTable[UNIFORM_ARRAY_SIZE];
+ qreal dpr;
qreal timestamp;
qreal entry;
QSizeF animSheetSize;
@@ -336,6 +337,9 @@ public:
float timestamp = float(state->timestamp);
memcpy(buf->data() + 72, &timestamp, 4);
+ float dpr = float(state->dpr);
+ memcpy(buf->data() + 76, &dpr, 4);
+
return true;
}
@@ -428,6 +432,9 @@ public:
float timestamp = float(state->timestamp);
memcpy(buf->data() + 72, &timestamp, 4);
+ float dpr = float(state->dpr);
+ memcpy(buf->data() + 76, &dpr, 4);
+
return true;
}
@@ -735,6 +742,7 @@ QQuickImageParticle::QQuickImageParticle(QQuickItem* parent)
, m_startedImageLoading(0)
, m_rhi(nullptr)
, m_apiChecked(false)
+ , m_dpr(1.0)
{
setFlag(ItemHasContents);
}
@@ -1420,6 +1428,8 @@ void QQuickImageParticle::finishBuildParticleNodes(QSGNode** node)
}
state->texture->setFiltering(QSGTexture::Linear);
state->entry = (qreal) m_entryEffect;
+ state->dpr = m_dpr;
+
m_material->setFlag(QSGMaterial::Blending | QSGMaterial::RequiresFullMatrix);
}
}
@@ -1531,6 +1541,8 @@ QSGNode *QQuickImageParticle::updatePaintNode(QSGNode *node, UpdatePaintNodeData
qWarning("Failed to query QRhi, particles disabled");
return nullptr;
}
+ // Get the pixel ratio of the window, used for pointsize scaling
+ m_dpr = m_window ? m_window->devicePixelRatio() : 1.0;
}
if (m_pleaseReset){
diff --git a/src/particles/qquickimageparticle_p.h b/src/particles/qquickimageparticle_p.h
index 0df098a05e..320534ca0b 100644
--- a/src/particles/qquickimageparticle_p.h
+++ b/src/particles/qquickimageparticle_p.h
@@ -482,6 +482,7 @@ private:
int m_startedImageLoading;
QRhi *m_rhi;
bool m_apiChecked;
+ qreal m_dpr;
};
QT_END_NAMESPACE
diff --git a/src/particles/shaders_ng/imageparticle.frag b/src/particles/shaders_ng/imageparticle.frag
index 89cdd48257..90b79e6ea9 100644
--- a/src/particles/shaders_ng/imageparticle.frag
+++ b/src/particles/shaders_ng/imageparticle.frag
@@ -23,6 +23,7 @@ layout(std140, binding = 0) uniform buf {
float opacity;
float entry;
float timestamp;
+ float dpr;
float sizetable[64];
float opacitytable[64];
} ubuf;
diff --git a/src/particles/shaders_ng/imageparticle.vert b/src/particles/shaders_ng/imageparticle.vert
index 420b2e2210..da3533dc40 100644
--- a/src/particles/shaders_ng/imageparticle.vert
+++ b/src/particles/shaders_ng/imageparticle.vert
@@ -48,6 +48,7 @@ layout(std140, binding = 0) uniform buf {
float opacity;
float entry;
float timestamp;
+ float dpr;
float sizetable[64];
float opacitytable[64];
} ubuf;
@@ -137,7 +138,7 @@ void main()
pos = vPos.xy
+ vVec.xy * t * vData.y // apply velocity vector..
+ 0.5 * vVec.zw * pow(t * vData.y, 2.);
- gl_PointSize = currentSize;
+ gl_PointSize = currentSize * ubuf.dpr;
#else // non point color
vec2 deform = currentSize * (vTex.xy - 0.5);
pos = vPos.xy
diff --git a/src/particles/shaders_ng/imageparticle_colored.frag.qsb b/src/particles/shaders_ng/imageparticle_colored.frag.qsb
index 0cde86cd8f..5dfc5d1d97 100644
--- a/src/particles/shaders_ng/imageparticle_colored.frag.qsb
+++ b/src/particles/shaders_ng/imageparticle_colored.frag.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_colored.vert.qsb b/src/particles/shaders_ng/imageparticle_colored.vert.qsb
index 77549dd5f0..b2548042ca 100644
--- a/src/particles/shaders_ng/imageparticle_colored.vert.qsb
+++ b/src/particles/shaders_ng/imageparticle_colored.vert.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsb b/src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsb
index f30633eec9..6e0373fd3b 100644
--- a/src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsb
+++ b/src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsb b/src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsb
index 3c92bc2f63..09b31c77c3 100644
--- a/src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsb
+++ b/src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_deformed.frag.qsb b/src/particles/shaders_ng/imageparticle_deformed.frag.qsb
index 00ebda56a9..3df7e49cd0 100644
--- a/src/particles/shaders_ng/imageparticle_deformed.frag.qsb
+++ b/src/particles/shaders_ng/imageparticle_deformed.frag.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_deformed.vert.qsb b/src/particles/shaders_ng/imageparticle_deformed.vert.qsb
index 378e9ba876..121e35fbb0 100644
--- a/src/particles/shaders_ng/imageparticle_deformed.vert.qsb
+++ b/src/particles/shaders_ng/imageparticle_deformed.vert.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_simplepoint.frag.qsb b/src/particles/shaders_ng/imageparticle_simplepoint.frag.qsb
index 738be48b91..6199c48589 100644
--- a/src/particles/shaders_ng/imageparticle_simplepoint.frag.qsb
+++ b/src/particles/shaders_ng/imageparticle_simplepoint.frag.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_simplepoint.vert.qsb b/src/particles/shaders_ng/imageparticle_simplepoint.vert.qsb
index a53868d4a5..ff8a5403d6 100644
--- a/src/particles/shaders_ng/imageparticle_simplepoint.vert.qsb
+++ b/src/particles/shaders_ng/imageparticle_simplepoint.vert.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_sprite.frag.qsb b/src/particles/shaders_ng/imageparticle_sprite.frag.qsb
index 53f7592520..2df0734683 100644
--- a/src/particles/shaders_ng/imageparticle_sprite.frag.qsb
+++ b/src/particles/shaders_ng/imageparticle_sprite.frag.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_sprite.vert.qsb b/src/particles/shaders_ng/imageparticle_sprite.vert.qsb
index 8d0efb05c3..5ef575a868 100644
--- a/src/particles/shaders_ng/imageparticle_sprite.vert.qsb
+++ b/src/particles/shaders_ng/imageparticle_sprite.vert.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_tabled.frag.qsb b/src/particles/shaders_ng/imageparticle_tabled.frag.qsb
index 788063044e..08a82fe8ab 100644
--- a/src/particles/shaders_ng/imageparticle_tabled.frag.qsb
+++ b/src/particles/shaders_ng/imageparticle_tabled.frag.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_tabled.vert.qsb b/src/particles/shaders_ng/imageparticle_tabled.vert.qsb
index 2027b0ecfa..febe5a495a 100644
--- a/src/particles/shaders_ng/imageparticle_tabled.vert.qsb
+++ b/src/particles/shaders_ng/imageparticle_tabled.vert.qsb
Binary files differ