From 88119bd35aa578ca8d2eafb6d2921ac1b7bb2a56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kaj=20Gr=C3=B6nholm?= Date: Wed, 11 Nov 2020 10:08:45 +0200 Subject: Take pixel ratio into account with point particles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ää Reviewed-by: Laszlo Agocs --- src/particles/qquickimageparticle.cpp | 12 ++++++++++++ src/particles/qquickimageparticle_p.h | 1 + src/particles/shaders_ng/imageparticle.frag | 1 + src/particles/shaders_ng/imageparticle.vert | 3 ++- .../shaders_ng/imageparticle_colored.frag.qsb | Bin 1644 -> 1676 bytes .../shaders_ng/imageparticle_colored.vert.qsb | Bin 3995 -> 4026 bytes .../shaders_ng/imageparticle_coloredpoint.frag.qsb | Bin 1634 -> 1663 bytes .../shaders_ng/imageparticle_coloredpoint.vert.qsb | Bin 3425 -> 3526 bytes .../shaders_ng/imageparticle_deformed.frag.qsb | Bin 1645 -> 1689 bytes .../shaders_ng/imageparticle_deformed.vert.qsb | Bin 5333 -> 5389 bytes .../shaders_ng/imageparticle_simplepoint.frag.qsb | Bin 1637 -> 1655 bytes .../shaders_ng/imageparticle_simplepoint.vert.qsb | Bin 3457 -> 3474 bytes .../shaders_ng/imageparticle_sprite.frag.qsb | Bin 1962 -> 1988 bytes .../shaders_ng/imageparticle_sprite.vert.qsb | Bin 6032 -> 6028 bytes .../shaders_ng/imageparticle_tabled.frag.qsb | Bin 1837 -> 1875 bytes .../shaders_ng/imageparticle_tabled.vert.qsb | Bin 5670 -> 5694 bytes 16 files changed, 16 insertions(+), 1 deletion(-) (limited to 'src') 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, ×tamp, 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, ×tamp, 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 Binary files a/src/particles/shaders_ng/imageparticle_colored.frag.qsb and b/src/particles/shaders_ng/imageparticle_colored.frag.qsb 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 Binary files a/src/particles/shaders_ng/imageparticle_colored.vert.qsb and b/src/particles/shaders_ng/imageparticle_colored.vert.qsb 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 Binary files a/src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsb and b/src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsb 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 Binary files a/src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsb and b/src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsb 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 Binary files a/src/particles/shaders_ng/imageparticle_deformed.frag.qsb and b/src/particles/shaders_ng/imageparticle_deformed.frag.qsb 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 Binary files a/src/particles/shaders_ng/imageparticle_deformed.vert.qsb and b/src/particles/shaders_ng/imageparticle_deformed.vert.qsb 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 Binary files a/src/particles/shaders_ng/imageparticle_simplepoint.frag.qsb and b/src/particles/shaders_ng/imageparticle_simplepoint.frag.qsb 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 Binary files a/src/particles/shaders_ng/imageparticle_simplepoint.vert.qsb and b/src/particles/shaders_ng/imageparticle_simplepoint.vert.qsb 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 Binary files a/src/particles/shaders_ng/imageparticle_sprite.frag.qsb and b/src/particles/shaders_ng/imageparticle_sprite.frag.qsb 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 Binary files a/src/particles/shaders_ng/imageparticle_sprite.vert.qsb and b/src/particles/shaders_ng/imageparticle_sprite.vert.qsb 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 Binary files a/src/particles/shaders_ng/imageparticle_tabled.frag.qsb and b/src/particles/shaders_ng/imageparticle_tabled.frag.qsb 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 Binary files a/src/particles/shaders_ng/imageparticle_tabled.vert.qsb and b/src/particles/shaders_ng/imageparticle_tabled.vert.qsb differ -- cgit v1.2.3