diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 6b27a31f8e..4b63dcb932 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1040,7 +1040,7 @@ void Avatar::renderDisplayName(gpu::Batch& batch, const ViewFrustum& view, const QByteArray nameUTF8 = renderedDisplayName.toLocal8Bit(); // Render text slightly in front to avoid z-fighting - textTransform.postTranslate(glm::vec3(0.0f, 0.0f, SLIGHTLY_IN_FRONT * displayNameRenderer->getFontSize())); + textTransform.postTranslate(glm::vec3(0.0f, 0.0f, SLIGHTLY_IN_FRONT)); batch.setModelTransform(textTransform); { PROFILE_RANGE_BATCH(batch, __FUNCTION__":renderText"); diff --git a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp index e7167b8c78..e6b42db0db 100644 --- a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp @@ -25,10 +25,6 @@ using namespace render; using namespace render::entities; -static const int FIXED_FONT_POINT_SIZE = 40; -const int FIXED_FONT_SCALING_RATIO = FIXED_FONT_POINT_SIZE * 92.0f; // Determined through experimentation to fit font to line height. -const float LINE_SCALE_RATIO = 1.2f; - TextEntityRenderer::TextEntityRenderer(const EntityItemPointer& entity) : Parent(entity), _textRenderer(TextRenderer3D::getInstance(ROBOTO_FONT_FAMILY)) { @@ -193,12 +189,8 @@ void TextEntityRenderer::doRender(RenderArgs* args) { QSizeF TextEntityRenderer::textSize(const QString& text) const { auto extents = _textRenderer->computeExtent(text); - extents.y *= 2.0f; - - float maxHeight = (float)_textRenderer->computeExtent("Xy").y * LINE_SCALE_RATIO; - float pointToWorldScale = (maxHeight / FIXED_FONT_SCALING_RATIO) * _lineHeight; - - return QSizeF(extents.x, extents.y) * pointToWorldScale; + float scale = _lineHeight / _textRenderer->getFontHeight(); + return scale * QSizeF(extents.x, extents.y); } void TextEntityRenderer::onAddToSceneTyped(const TypedEntityPointer& entity) { @@ -375,7 +367,7 @@ void entities::TextPayload::render(RenderArgs* args) { transform.setRotation(BillboardModeHelpers::getBillboardRotation(transform.getTranslation(), transform.getRotation(), textRenderable->_billboardMode, usePrimaryFrustum ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); - float scale = textRenderable->_lineHeight / textRenderer->getFontSize(); + float scale = textRenderable->_lineHeight / textRenderer->getFontHeight(); transform.postTranslate(glm::vec3(-0.5, 0.5, 1.0f + EPSILON / dimensions.z)); transform.setScale(scale); batch.setModelTransform(transform); diff --git a/libraries/render-utils/src/TextRenderer3D.cpp b/libraries/render-utils/src/TextRenderer3D.cpp index 8ab1b8e0e9..a4680805e6 100644 --- a/libraries/render-utils/src/TextRenderer3D.cpp +++ b/libraries/render-utils/src/TextRenderer3D.cpp @@ -33,9 +33,9 @@ glm::vec2 TextRenderer3D::computeExtent(const QString& str) const { return glm::vec2(0.0f, 0.0f); } -float TextRenderer3D::getFontSize() const { +float TextRenderer3D::getFontHeight() const { if (_font) { - return _font->getFontSize(); + return _font->getFontHeight(); } return 0.0f; } diff --git a/libraries/render-utils/src/TextRenderer3D.h b/libraries/render-utils/src/TextRenderer3D.h index 9db93e9dcc..1a0a1343f8 100644 --- a/libraries/render-utils/src/TextRenderer3D.h +++ b/libraries/render-utils/src/TextRenderer3D.h @@ -25,7 +25,7 @@ public: static TextRenderer3D* getInstance(const char* family); glm::vec2 computeExtent(const QString& str) const; - float getFontSize() const; // Pixel size + float getFontHeight() const; void draw(gpu::Batch& batch, const Font::DrawProps& props); void draw(gpu::Batch& batch, const QString& font, const Font::DrawProps& props); diff --git a/libraries/render-utils/src/text/Font.cpp b/libraries/render-utils/src/text/Font.cpp index d8b5deed96..81badb8440 100644 --- a/libraries/render-utils/src/text/Font.cpp +++ b/libraries/render-utils/src/text/Font.cpp @@ -129,7 +129,7 @@ void Font::read(QIODevice& in) { } _distanceRange = glm::vec2(arteryFont.variants[0].metrics.distanceRange); - _fontSize = arteryFont.variants[0].metrics.ascender + fabs(arteryFont.variants[0].metrics.descender); + _fontHeight = arteryFont.variants[0].metrics.ascender + fabs(arteryFont.variants[0].metrics.descender); _leading = arteryFont.variants[0].metrics.lineHeight; _spaceWidth = 0.5f * arteryFont.variants[0].metrics.emSize; // We use half the emSize as a first guess for _spaceWidth @@ -303,11 +303,11 @@ QStringList Font::tokenizeForWrapping(const QString& str) const { return tokens; } -glm::vec2 Font::computeTokenExtent(const QString& token) const { - glm::vec2 advance(0, _fontSize); +float Font::computeTokenWidth(const QString& token) const { + float advance = 0.0f; foreach(QChar c, token) { Q_ASSERT(c != '\n'); - advance.x += (c == ' ') ? _spaceWidth : getGlyph(c).d; + advance += (c == ' ') ? _spaceWidth : getGlyph(c).d; } return advance; } @@ -318,10 +318,10 @@ glm::vec2 Font::computeExtent(const QString& str) const { QStringList lines = splitLines(str); if (!lines.empty()) { for(const auto& line : lines) { - glm::vec2 tokenExtent = computeTokenExtent(line); - extent.x = std::max(tokenExtent.x, extent.x); + float tokenWidth = computeTokenWidth(line); + extent.x = std::max(tokenWidth, extent.x); } - extent.y = lines.count() * _fontSize; + extent.y = lines.count() * _fontHeight; } return extent; } diff --git a/libraries/render-utils/src/text/Font.h b/libraries/render-utils/src/text/Font.h index d9e2570e7e..8112e279e5 100644 --- a/libraries/render-utils/src/text/Font.h +++ b/libraries/render-utils/src/text/Font.h @@ -63,7 +63,7 @@ public: }; glm::vec2 computeExtent(const QString& str) const; - float getFontSize() const { return _fontSize; } + float getFontHeight() const { return _fontHeight; } struct DrawProps { DrawProps(const QString& str, const glm::vec4& color, const glm::vec3& effectColor, const glm::vec2& origin, const glm::vec2& bounds, @@ -103,7 +103,7 @@ private: static Pointer load(const QString& family, QIODevice& fontFile); QStringList tokenizeForWrapping(const QString& str) const; QStringList splitLines(const QString& str) const; - glm::vec2 computeTokenExtent(const QString& str) const; + float computeTokenWidth(const QString& str) const; const Glyph& getGlyph(const QChar& c) const; void buildVertices(DrawInfo& drawInfo, const QString& str, const glm::vec2& origin, const glm::vec2& bounds, float scale, bool enlargeForShadows, @@ -121,7 +121,7 @@ private: // Font characteristics QString _family; glm::vec2 _distanceRange { 1.0f }; - float _fontSize { 0.0f }; + float _fontHeight { 0.0f }; float _leading { 0.0f }; float _spaceWidth { 0.0f };