From beb5801eeeb902038351a1ce6ff58a7cba928e06 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 29 Sep 2017 10:39:02 +0100 Subject: [PATCH] Improved SDF generation --- src/osgText/Glyph.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/osgText/Glyph.cpp b/src/osgText/Glyph.cpp index 25d9764cd..b0eac3ec8 100644 --- a/src/osgText/Glyph.cpp +++ b/src/osgText/Glyph.cpp @@ -156,7 +156,7 @@ void GlyphTexture::copyGlyphImage(Glyph* glyph) int dest_rows = _image->t(); unsigned char* dest_data = _image->data(glyph->getTexturePositionX(),glyph->getTexturePositionY()); - int search_distance = glyph->getFontResolution().second/8; + int search_distance = glyph->getFontResolution().second/4; int left = -search_distance; int right = glyph->s()+search_distance; @@ -165,7 +165,7 @@ void GlyphTexture::copyGlyphImage(Glyph* glyph) float multiplier = 1.0/255.0f; - float max_distance = glyph->getFontResolution().first/4; + float max_distance = sqrtf(float(search_distance)*float(search_distance)*2.0); int num_channels = TEXTURE_IMAGE_NUM_CHANNELS; @@ -175,10 +175,9 @@ void GlyphTexture::copyGlyphImage(Glyph* glyph) if ((lower+glyph->getTexturePositionY())<0) lower = -glyph->getTexturePositionY(); if ((upper+glyph->getTexturePositionY())>=dest_rows) upper = dest_rows-glyph->getTexturePositionY()-1; - bool use_SDF_for_Outline = true; - float outer_outline_distance = float(glyph->getFontResolution().first)*0.14f; + float outer_outline_distance = float(glyph->getFontResolution().first)*0.1f; float inner_outline_distance = outer_outline_distance*0.5f; unsigned char full_on = 255; @@ -198,7 +197,7 @@ void GlyphTexture::copyGlyphImage(Glyph* glyph) unsigned char outer_max_value = center_value; float center_value_f = center_value*multiplier; - float min_distance = FLT_MAX; + float min_distance = max_distance; if (center_value>0 && center_value