diff options
author | Kaj Grönholm <kaj.gronholm@qt.io> | 2020-11-11 10:08:45 +0200 |
---|---|---|
committer | Kaj Grönholm <kaj.gronholm@qt.io> | 2020-11-12 13:42:58 +0200 |
commit | 88119bd35aa578ca8d2eafb6d2921ac1b7bb2a56 (patch) | |
tree | c016b6f5be6023eb797fa02697c41cdb809b8d6d | |
parent | 54d4f8f526f9c9a1af702b14925e1d34ee8b2134 (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>
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, ×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 Binary files differindex 0cde86cd8f..5dfc5d1d97 100644 --- a/src/particles/shaders_ng/imageparticle_colored.frag.qsb +++ b/src/particles/shaders_ng/imageparticle_colored.frag.qsb diff --git a/src/particles/shaders_ng/imageparticle_colored.vert.qsb b/src/particles/shaders_ng/imageparticle_colored.vert.qsb Binary files differindex 77549dd5f0..b2548042ca 100644 --- a/src/particles/shaders_ng/imageparticle_colored.vert.qsb +++ b/src/particles/shaders_ng/imageparticle_colored.vert.qsb diff --git a/src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsb b/src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsb Binary files differindex f30633eec9..6e0373fd3b 100644 --- a/src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsb +++ b/src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsb diff --git a/src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsb b/src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsb Binary files differindex 3c92bc2f63..09b31c77c3 100644 --- a/src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsb +++ b/src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsb diff --git a/src/particles/shaders_ng/imageparticle_deformed.frag.qsb b/src/particles/shaders_ng/imageparticle_deformed.frag.qsb Binary files differindex 00ebda56a9..3df7e49cd0 100644 --- a/src/particles/shaders_ng/imageparticle_deformed.frag.qsb +++ b/src/particles/shaders_ng/imageparticle_deformed.frag.qsb diff --git a/src/particles/shaders_ng/imageparticle_deformed.vert.qsb b/src/particles/shaders_ng/imageparticle_deformed.vert.qsb Binary files differindex 378e9ba876..121e35fbb0 100644 --- a/src/particles/shaders_ng/imageparticle_deformed.vert.qsb +++ b/src/particles/shaders_ng/imageparticle_deformed.vert.qsb diff --git a/src/particles/shaders_ng/imageparticle_simplepoint.frag.qsb b/src/particles/shaders_ng/imageparticle_simplepoint.frag.qsb Binary files differindex 738be48b91..6199c48589 100644 --- a/src/particles/shaders_ng/imageparticle_simplepoint.frag.qsb +++ b/src/particles/shaders_ng/imageparticle_simplepoint.frag.qsb diff --git a/src/particles/shaders_ng/imageparticle_simplepoint.vert.qsb b/src/particles/shaders_ng/imageparticle_simplepoint.vert.qsb Binary files differindex a53868d4a5..ff8a5403d6 100644 --- a/src/particles/shaders_ng/imageparticle_simplepoint.vert.qsb +++ b/src/particles/shaders_ng/imageparticle_simplepoint.vert.qsb diff --git a/src/particles/shaders_ng/imageparticle_sprite.frag.qsb b/src/particles/shaders_ng/imageparticle_sprite.frag.qsb Binary files differindex 53f7592520..2df0734683 100644 --- a/src/particles/shaders_ng/imageparticle_sprite.frag.qsb +++ b/src/particles/shaders_ng/imageparticle_sprite.frag.qsb diff --git a/src/particles/shaders_ng/imageparticle_sprite.vert.qsb b/src/particles/shaders_ng/imageparticle_sprite.vert.qsb Binary files differindex 8d0efb05c3..5ef575a868 100644 --- a/src/particles/shaders_ng/imageparticle_sprite.vert.qsb +++ b/src/particles/shaders_ng/imageparticle_sprite.vert.qsb diff --git a/src/particles/shaders_ng/imageparticle_tabled.frag.qsb b/src/particles/shaders_ng/imageparticle_tabled.frag.qsb Binary files differindex 788063044e..08a82fe8ab 100644 --- a/src/particles/shaders_ng/imageparticle_tabled.frag.qsb +++ b/src/particles/shaders_ng/imageparticle_tabled.frag.qsb diff --git a/src/particles/shaders_ng/imageparticle_tabled.vert.qsb b/src/particles/shaders_ng/imageparticle_tabled.vert.qsb Binary files differindex 2027b0ecfa..febe5a495a 100644 --- a/src/particles/shaders_ng/imageparticle_tabled.vert.qsb +++ b/src/particles/shaders_ng/imageparticle_tabled.vert.qsb |