Removed the glyph image outline support as it's no longer required.
This commit is contained in:
parent
8b12d2d71a
commit
24bec09b9e
@ -103,7 +103,6 @@ struct TextSettings
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (arguments.read("--GREYSCALE")) { glyphTextureFeatures = osgText::GlyphTexture::GREYSCALE; }
|
if (arguments.read("--GREYSCALE")) { glyphTextureFeatures = osgText::GlyphTexture::GREYSCALE; }
|
||||||
if (arguments.read("--OUTLINE_GREYSCALE")) { glyphTextureFeatures = osgText::GlyphTexture::OUTLINE_GREYSCALE; }
|
|
||||||
if (arguments.read("--SIGNED_DISTANCE_FIELD")) { glyphTextureFeatures = osgText::GlyphTexture::SIGNED_DISTANCE_FIELD; }
|
if (arguments.read("--SIGNED_DISTANCE_FIELD")) { glyphTextureFeatures = osgText::GlyphTexture::SIGNED_DISTANCE_FIELD; }
|
||||||
if (arguments.read("--ALL_FEATURES")) { glyphTextureFeatures = osgText::GlyphTexture::ALL_FEATURES; }
|
if (arguments.read("--ALL_FEATURES")) { glyphTextureFeatures = osgText::GlyphTexture::ALL_FEATURES; }
|
||||||
|
|
||||||
|
@ -263,7 +263,6 @@ public:
|
|||||||
enum Features
|
enum Features
|
||||||
{
|
{
|
||||||
GREYSCALE,
|
GREYSCALE,
|
||||||
OUTLINE_GREYSCALE,
|
|
||||||
SIGNED_DISTANCE_FIELD,
|
SIGNED_DISTANCE_FIELD,
|
||||||
ALL_FEATURES
|
ALL_FEATURES
|
||||||
};
|
};
|
||||||
|
@ -32,7 +32,7 @@ using namespace std;
|
|||||||
#define TEXTURE_IMAGE_NUM_CHANNELS 1
|
#define TEXTURE_IMAGE_NUM_CHANNELS 1
|
||||||
#define TEXTURE_IMAGE_FORMAT OSGTEXT_GLYPH_FORMAT
|
#define TEXTURE_IMAGE_FORMAT OSGTEXT_GLYPH_FORMAT
|
||||||
#else
|
#else
|
||||||
#define TEXTURE_IMAGE_NUM_CHANNELS 4
|
#define TEXTURE_IMAGE_NUM_CHANNELS 2
|
||||||
#define TEXTURE_IMAGE_FORMAT GL_RGBA
|
#define TEXTURE_IMAGE_FORMAT GL_RGBA
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -60,9 +60,7 @@ int GlyphTexture::compare(const osg::StateAttribute& rhs) const
|
|||||||
int GlyphTexture::getEffectMargin(const Glyph* glyph)
|
int GlyphTexture::getEffectMargin(const Glyph* glyph)
|
||||||
{
|
{
|
||||||
if (_glyphTextureFeatures==GREYSCALE) return 0;
|
if (_glyphTextureFeatures==GREYSCALE) return 0;
|
||||||
// else return glyph->getFontResolution().second/4;
|
|
||||||
else return osg::maximum(glyph->getFontResolution().second/6, 2u);
|
else return osg::maximum(glyph->getFontResolution().second/6, 2u);
|
||||||
// else return osg::maximum(glyph->getFontResolution().second/8,1u);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int GlyphTexture::getTexelMargin(const Glyph* glyph)
|
int GlyphTexture::getTexelMargin(const Glyph* glyph)
|
||||||
@ -195,10 +193,6 @@ void GlyphTexture::copyGlyphImage(Glyph* glyph)
|
|||||||
if ((lower+glyph->getTexturePositionY())<0) lower = -glyph->getTexturePositionY();
|
if ((lower+glyph->getTexturePositionY())<0) lower = -glyph->getTexturePositionY();
|
||||||
if ((upper+glyph->getTexturePositionY())>=dest_rows) upper = dest_rows-glyph->getTexturePositionY()-1;
|
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.1f;
|
|
||||||
float inner_outline_distance = outer_outline_distance*0.5f;
|
|
||||||
|
|
||||||
unsigned char full_on = 255;
|
unsigned char full_on = 255;
|
||||||
unsigned char mid_point = full_on/2;
|
unsigned char mid_point = full_on/2;
|
||||||
@ -213,17 +207,11 @@ void GlyphTexture::copyGlyphImage(Glyph* glyph)
|
|||||||
unsigned char center_value = 0;
|
unsigned char center_value = 0;
|
||||||
if (dr>=0 && dr<src_rows && dc>=0 && dc<src_columns) center_value = *(src_data + dr*src_columns + dc);
|
if (dr>=0 && dr<src_rows && dc>=0 && dc<src_columns) center_value = *(src_data + dr*src_columns + dc);
|
||||||
|
|
||||||
unsigned char inner_max_value = center_value;
|
|
||||||
unsigned char outer_max_value = center_value;
|
|
||||||
|
|
||||||
float center_value_f = center_value*multiplier;
|
float center_value_f = center_value*multiplier;
|
||||||
float min_distance = max_distance;
|
float min_distance = max_distance;
|
||||||
|
|
||||||
if (center_value>0 && center_value<full_on)
|
if (center_value>0 && center_value<full_on)
|
||||||
{
|
{
|
||||||
inner_max_value = 255;
|
|
||||||
outer_max_value = 255;
|
|
||||||
|
|
||||||
if (center_value_f>=mid_point_f)
|
if (center_value_f>=mid_point_f)
|
||||||
{
|
{
|
||||||
min_distance = center_value_f-mid_point_f;
|
min_distance = center_value_f-mid_point_f;
|
||||||
@ -263,9 +251,6 @@ void GlyphTexture::copyGlyphImage(Glyph* glyph)
|
|||||||
else local_distance += (local_value_f - mid_point_f)*local_multiplier;
|
else local_distance += (local_value_f - mid_point_f)*local_multiplier;
|
||||||
|
|
||||||
if (local_distance<min_distance) min_distance = local_distance;
|
if (local_distance<min_distance) min_distance = local_distance;
|
||||||
|
|
||||||
if (local_value>inner_max_value && local_distance<=inner_outline_distance) inner_max_value = local_value;
|
|
||||||
if (local_value>outer_max_value && local_distance<=outer_outline_distance) outer_max_value = local_value;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,9 +276,6 @@ void GlyphTexture::copyGlyphImage(Glyph* glyph)
|
|||||||
else local_distance += (local_value_f - mid_point_f)*local_multiplier;
|
else local_distance += (local_value_f - mid_point_f)*local_multiplier;
|
||||||
|
|
||||||
if (local_distance<min_distance) min_distance = local_distance;
|
if (local_distance<min_distance) min_distance = local_distance;
|
||||||
|
|
||||||
if (local_value>inner_max_value && local_distance<=inner_outline_distance) inner_max_value = local_value;
|
|
||||||
if (local_value>outer_max_value && local_distance<=outer_outline_distance) outer_max_value = local_value;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,9 +302,6 @@ void GlyphTexture::copyGlyphImage(Glyph* glyph)
|
|||||||
else local_distance += (local_value_f - mid_point_f)*local_multiplier;
|
else local_distance += (local_value_f - mid_point_f)*local_multiplier;
|
||||||
|
|
||||||
if (local_distance<min_distance) min_distance = local_distance;
|
if (local_distance<min_distance) min_distance = local_distance;
|
||||||
|
|
||||||
if (local_value>inner_max_value && local_distance<=inner_outline_distance) inner_max_value = local_value;
|
|
||||||
if (local_value>outer_max_value && local_distance<=outer_outline_distance) outer_max_value = local_value;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -348,9 +327,6 @@ void GlyphTexture::copyGlyphImage(Glyph* glyph)
|
|||||||
else local_distance += (local_value_f - mid_point_f)*local_multiplier;
|
else local_distance += (local_value_f - mid_point_f)*local_multiplier;
|
||||||
|
|
||||||
if (local_distance<min_distance) min_distance = local_distance;
|
if (local_distance<min_distance) min_distance = local_distance;
|
||||||
|
|
||||||
if (local_value>inner_max_value && local_distance<=inner_outline_distance) inner_max_value = local_value;
|
|
||||||
if (local_value>outer_max_value && local_distance<=outer_outline_distance) outer_max_value = local_value;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -368,63 +344,11 @@ void GlyphTexture::copyGlyphImage(Glyph* glyph)
|
|||||||
|
|
||||||
|
|
||||||
unsigned char* dest_ptr = dest_data + (dr*dest_columns + dc)*num_channels;
|
unsigned char* dest_ptr = dest_data + (dr*dest_columns + dc)*num_channels;
|
||||||
if (num_channels==4)
|
if (num_channels==2)
|
||||||
{
|
{
|
||||||
// signed distance field value
|
// signed distance field value
|
||||||
*(dest_ptr++) = value;
|
*(dest_ptr++) = value;
|
||||||
|
|
||||||
float outline_distance = inner_outline_distance;
|
|
||||||
|
|
||||||
// compute the alpha value of outline, one texel thick
|
|
||||||
unsigned char outline = 0;
|
|
||||||
|
|
||||||
if (use_SDF_for_Outline)
|
|
||||||
{
|
|
||||||
if (center_value<255)
|
|
||||||
{
|
|
||||||
float inner_outline = outline_distance-1.0f;
|
|
||||||
if (min_distance<inner_outline) outline = 255;
|
|
||||||
else if (min_distance<=outline_distance) outline = (unsigned char)(255.0*(outline_distance-min_distance)/(outline_distance-inner_outline));
|
|
||||||
else outline = 0;
|
|
||||||
}
|
|
||||||
if (outline>center_value)
|
|
||||||
{
|
|
||||||
outline -= center_value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
outline = inner_max_value-center_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
*(dest_ptr++) = outline;
|
|
||||||
|
|
||||||
|
|
||||||
outline_distance = outer_outline_distance;
|
|
||||||
|
|
||||||
// compute the alpha value of outline, one texel thick
|
|
||||||
outline = 0;
|
|
||||||
if (use_SDF_for_Outline)
|
|
||||||
{
|
|
||||||
if (center_value<255)
|
|
||||||
{
|
|
||||||
float inner_outline = outline_distance-1.0f;
|
|
||||||
if (min_distance<inner_outline) outline = 255;
|
|
||||||
else if (min_distance<=outline_distance) outline = (unsigned char)(255.0*(outline_distance-min_distance)/(outline_distance-inner_outline));
|
|
||||||
else outline = 0;
|
|
||||||
}
|
|
||||||
if (outline>center_value)
|
|
||||||
{
|
|
||||||
outline -= center_value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
outline = outer_max_value-center_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
*(dest_ptr++) = outline;
|
|
||||||
|
|
||||||
// original alpha value from glyph image
|
// original alpha value from glyph image
|
||||||
*(dest_ptr) = center_value;
|
*(dest_ptr) = center_value;
|
||||||
}
|
}
|
||||||
@ -468,9 +392,9 @@ osg::Image* GlyphTexture::createImage()
|
|||||||
_image = new osg::Image;
|
_image = new osg::Image;
|
||||||
|
|
||||||
#if defined(OSG_GL3_AVAILABLE) && !defined(OSG_GL2_AVAILABLE) && !defined(OSG_GL1_AVAILABLE)
|
#if defined(OSG_GL3_AVAILABLE) && !defined(OSG_GL2_AVAILABLE) && !defined(OSG_GL1_AVAILABLE)
|
||||||
GLenum imageFormat = (_glyphTextureFeatures==GREYSCALE) ? GL_RED : GL_RGBA;
|
GLenum imageFormat = (_glyphTextureFeatures==GREYSCALE) ? GL_RED : GL_RG;
|
||||||
#else
|
#else
|
||||||
GLenum imageFormat = (_glyphTextureFeatures==GREYSCALE) ? GL_ALPHA : GL_RGBA;
|
GLenum imageFormat = (_glyphTextureFeatures==GREYSCALE) ? GL_ALPHA : GL_LUMINANCE_ALPHA;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_image->allocateImage(getTextureWidth(), getTextureHeight(), 1, imageFormat, GL_UNSIGNED_BYTE);
|
_image->allocateImage(getTextureWidth(), getTextureHeight(), 1, imageFormat, GL_UNSIGNED_BYTE);
|
||||||
|
Loading…
Reference in New Issue
Block a user