From bc3cb8a873d8382c044644a26213f05d0cfbca1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 21 Apr 2025 13:41:31 +0200 Subject: [PATCH] Text: add a DistanceFieldGlyphCache*GL::radius() getter. Without it's rather impossible to reason about properties of the generated distance field for consistent rendering. --- src/Magnum/Text/DistanceFieldGlyphCacheGL.cpp | 8 ++++++++ src/Magnum/Text/DistanceFieldGlyphCacheGL.h | 9 +++++++++ src/Magnum/Text/Test/DistanceFieldGlyphCacheGLTest.cpp | 6 ++++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Magnum/Text/DistanceFieldGlyphCacheGL.cpp b/src/Magnum/Text/DistanceFieldGlyphCacheGL.cpp index 00f5ad028..cd6291de2 100644 --- a/src/Magnum/Text/DistanceFieldGlyphCacheGL.cpp +++ b/src/Magnum/Text/DistanceFieldGlyphCacheGL.cpp @@ -88,6 +88,10 @@ DistanceFieldGlyphCacheGL::DistanceFieldGlyphCacheGL(const Vector2i& size, const DistanceFieldGlyphCacheGL::DistanceFieldGlyphCacheGL(NoCreateT) noexcept: GlyphCacheGL{NoCreate} {} +UnsignedInt DistanceFieldGlyphCacheGL::radius() const { + return static_cast(*_state).distanceField.radius(); +} + #ifdef MAGNUM_BUILD_DEPRECATED Vector2i DistanceFieldGlyphCacheGL::distanceFieldTextureSize() const { return processedSize().xy(); @@ -238,6 +242,10 @@ DistanceFieldGlyphCacheArrayGL::DistanceFieldGlyphCacheArrayGL(const Vector3i& s DistanceFieldGlyphCacheArrayGL::DistanceFieldGlyphCacheArrayGL(NoCreateT) noexcept: GlyphCacheArrayGL{NoCreate} {} +UnsignedInt DistanceFieldGlyphCacheArrayGL::radius() const { + return static_cast(*_state).distanceField.radius(); +} + GlyphCacheFeatures DistanceFieldGlyphCacheArrayGL::doFeatures() const { return GlyphCacheFeature::ImageProcessing #ifndef MAGNUM_TARGET_GLES diff --git a/src/Magnum/Text/DistanceFieldGlyphCacheGL.h b/src/Magnum/Text/DistanceFieldGlyphCacheGL.h index a99111739..ca061b25d 100644 --- a/src/Magnum/Text/DistanceFieldGlyphCacheGL.h +++ b/src/Magnum/Text/DistanceFieldGlyphCacheGL.h @@ -147,6 +147,12 @@ class MAGNUM_TEXT_EXPORT DistanceFieldGlyphCacheGL: public GlyphCacheGL { */ explicit DistanceFieldGlyphCacheGL(NoCreateT) noexcept; + /** + * @brief Distance field calculation radius + * @m_since_latest + */ + UnsignedInt radius() const; + #ifdef MAGNUM_BUILD_DEPRECATED /** * @brief Distance field texture size @@ -247,6 +253,9 @@ class MAGNUM_TEXT_EXPORT DistanceFieldGlyphCacheArrayGL: public GlyphCacheArrayG */ explicit DistanceFieldGlyphCacheArrayGL(NoCreateT) noexcept; + /** @brief Distance field calculation radius */ + UnsignedInt radius() const; + private: struct State; diff --git a/src/Magnum/Text/Test/DistanceFieldGlyphCacheGLTest.cpp b/src/Magnum/Text/Test/DistanceFieldGlyphCacheGLTest.cpp index 955329961..271ea5d19 100644 --- a/src/Magnum/Text/Test/DistanceFieldGlyphCacheGLTest.cpp +++ b/src/Magnum/Text/Test/DistanceFieldGlyphCacheGLTest.cpp @@ -252,7 +252,7 @@ DistanceFieldGlyphCacheGLTest::DistanceFieldGlyphCacheGLTest() { } void DistanceFieldGlyphCacheGLTest::construct() { - DistanceFieldGlyphCacheGL cache{{256, 512}, {64, 128}, 16}; + DistanceFieldGlyphCacheGL cache{{256, 512}, {64, 128}, 13}; MAGNUM_VERIFY_NO_GL_ERROR(); #ifndef MAGNUM_TARGET_GLES @@ -284,6 +284,7 @@ void DistanceFieldGlyphCacheGLTest::construct() { #ifndef MAGNUM_TARGET_GLES CORRADE_COMPARE(cache.texture().imageSize(0), (Vector2i{64, 128})); #endif + CORRADE_COMPARE(cache.radius(), 13); } #ifndef MAGNUM_TARGET_GLES2 @@ -293,7 +294,7 @@ void DistanceFieldGlyphCacheGLTest::constructArray() { CORRADE_SKIP(GL::Extensions::EXT::texture_array::string() << "is not supported."); #endif - DistanceFieldGlyphCacheArrayGL cache{{256, 512, 7}, {64, 128}, 16}; + DistanceFieldGlyphCacheArrayGL cache{{256, 512, 7}, {64, 128}, 17}; MAGNUM_VERIFY_NO_GL_ERROR(); #ifndef MAGNUM_TARGET_GLES @@ -309,6 +310,7 @@ void DistanceFieldGlyphCacheGLTest::constructArray() { #ifndef MAGNUM_TARGET_GLES CORRADE_COMPARE(cache.texture().imageSize(0), (Vector3i{64, 128, 7})); #endif + CORRADE_COMPARE(cache.radius(), 17); } #endif