Moved osgText across to create GL_ALPHA textures instead of GL_LUMINANCE_ALPHA

This commit is contained in:
Robert Osfield
2003-12-09 11:31:33 +00:00
parent 393f1580c8
commit 4c3f6004df
4 changed files with 93 additions and 19 deletions

View File

@@ -195,10 +195,10 @@ void DefaultFont::constructGlyphs()
unsigned int sourceWidth = 8;
unsigned int sourceHeight = 12;
//#define USE_LUMINANCE_ALPHA
#ifdef USE_LUMINANCE_ALPHA
_width = sourceWidth+2*_margin;
_height = sourceHeight+2*_margin;
// populate the glyph mp
for(unsigned int i=32;i<127;i++)
@@ -229,22 +229,6 @@ void DefaultFont::constructGlyphs()
for(unsigned int row=0;row<sourceHeight;++row,++ptr)
{
data+=2*_margin; // skip the left margin
// (*data++)=((*ptr)&128)?value_on:value_off;
// (*data++)=((*ptr)&128)?value_on:value_off;
// (*data++)=((*ptr)&64)?value_on:value_off;
// (*data++)=((*ptr)&64)?value_on:value_off;
// (*data++)=((*ptr)&32)?value_on:value_off;
// (*data++)=((*ptr)&32)?value_on:value_off;
// (*data++)=((*ptr)&16)?value_on:value_off;
// (*data++)=((*ptr)&16)?value_on:value_off;
// (*data++)=((*ptr)&8)?value_on:value_off;
// (*data++)=((*ptr)&8)?value_on:value_off;
// (*data++)=((*ptr)&4)?value_on:value_off;
// (*data++)=((*ptr)&4)?value_on:value_off;
// (*data++)=((*ptr)&2)?value_on:value_off;
// (*data++)=((*ptr)&2)?value_on:value_off;
// (*data++)=((*ptr)&1)?value_on:value_off;
// (*data++)=((*ptr)&1)?value_on:value_off;
(*data++)=255;
(*data++)=((*ptr)&128)?value_on:value_off;
(*data++)=255;
@@ -263,7 +247,52 @@ void DefaultFont::constructGlyphs()
(*data++)=((*ptr)&1)?value_on:value_off;
data+=2*_margin; // skip the right margin.
}
#else
_width = sourceWidth+2*_margin;
_height = sourceHeight+2*_margin;
// populate the glyph mp
for(unsigned int i=32;i<127;i++)
{
osg::ref_ptr<Glyph> glyph = new Glyph;
unsigned int dataSize = _width*_height;
unsigned char* data = new unsigned char[dataSize];
// clear the image to zeros.
for(unsigned char* p=data;p<data+dataSize;) { *p++ = 0; }
glyph->setImage(_width,_height,1,
GL_ALPHA,
GL_ALPHA,GL_UNSIGNED_BYTE,
data,
osg::Image::USE_NEW_DELETE,
1);
glyph->setInternalTextureFormat(GL_ALPHA);
// now populate data arry by converting bitmap into a luminance_alpha map.
unsigned char* ptr = rasters[i-32];
unsigned char value_on = 255;
unsigned char value_off = 0;
// skip the top margin
data += (_margin*_width);
for(unsigned int row=0;row<sourceHeight;++row,++ptr)
{
data+=_margin; // skip the left margin
(*data++)=((*ptr)&128)?value_on:value_off;
(*data++)=((*ptr)&64)?value_on:value_off;
(*data++)=((*ptr)&32)?value_on:value_off;
(*data++)=((*ptr)&16)?value_on:value_off;
(*data++)=((*ptr)&8)?value_on:value_off;
(*data++)=((*ptr)&4)?value_on:value_off;
(*data++)=((*ptr)&2)?value_on:value_off;
(*data++)=((*ptr)&1)?value_on:value_off;
data+=_margin; // skip the right margin.
}
#endif
glyph->setHorizontalBearing(osg::Vec2(0.0f,0.0f)); // bottom left.
glyph->setHorizontalAdvance((float)_width);

View File

@@ -17,6 +17,8 @@
#include <osg/State>
#include <osg/Notify>
#include <osg/TexEnv>
#include <osgDB/ReadFile>
#include <osgDB/FileUtils>
#include <osg/GLU>
@@ -87,6 +89,7 @@ Font::Font(FontImplementation* implementation):
_magFilterHint(osg::Texture::LINEAR)
{
setImplementation(implementation);
_texEnv = new osg::TexEnv(osg::TexEnv::BLEND);
}
Font::~Font()
@@ -259,6 +262,7 @@ void Font::addGlyph(unsigned int width, unsigned int height, unsigned int charco
glyphTexture->setStateSet(stateset);
stateset->setMode(GL_BLEND,osg::StateAttribute::ON);
stateset->setTextureAttributeAndModes(0,glyphTexture,osg::StateAttribute::ON);
if (_texEnv.valid()) stateset->setTextureAttribute(0,_texEnv.get());
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
if (!glyphTexture->getSpaceForGlyph(glyph,posX,posY))