My PolygonFont class: (MPL license)

Needs to be improved. Also only does a..z lowercase only.
Also needs Freetype2 integration.

Code:
unit PolygonFont;

interface

uses Polygon;

type
TPolygonFont = class
     private
        FCharGlyph: array[0..255] of TPolygon;
        FCharWidth: array[0..255] of integer;
        FName: string;
        FPrecision: integer;
        FScale: single;
     public
        procedure Generate();
        procedure RenderChar(value: char);
        procedure RenderString(value: string);
        property Name: string read FName write FName;
        property Precision: integer read FPrecision write FPrecision;
        property Scale: single read FScale write FScale;
     end;

implementation

uses DGLOpenGL, VectorFont, Windows, Graphics;

procedure TPolygonFont.Generate();
var
  loop: integer;
  glyphs: TStrokeCollection;
  cbounds: TRect;
  x1, y1, x2, y2, xm, ym: integer;
  sx, sy: double; // Scaling factors
  i, j, k, sog: integer;
  stroke: TFontStroke;
  //scale: integer;

    TTF2Vector: TTTFToVectorConverter;

begin

 //vectorfont test
  TTF2Vector := TTTFToVectorConverter.Create(nil);
  TTF2Vector.Font := TFont.Create();
  TTF2Vector.Font.Name := FName;
  // Setup spline precision (1 min, 100 max)
  TTF2Vector.Precision := FPrecision;

  for loop := 0 to 255 do
  begin
    FCharGlyph[loop] := TPolygon.Create();
    //FCharGlyph[loop].Outline := true;
    FCharGlyph[loop].SetColor(0.0,1.0,0.0,0.0);

    // Get glyphs' strokes
    if &#40;loop >= ord&#40;'a'&#41;&#41; and &#40;loop <= ord&#40;'z'&#41;&#41; then
    begin
    glyphs &#58;= TTF2Vector.GetCharacterGlyphs&#40; loop &#41;;

    // Get character bounds
    cbounds &#58;= glyphs.Bounds;
    xm &#58;= &#40;cbounds.Right-cbounds.Left+1&#41; div 2;
    ym &#58;= &#40;cbounds.Bottom-cbounds.Top+1&#41; div 2;

    // Compute the scaling factors
    sx &#58;= fscale;
    sy &#58;= fscale;

    for i &#58;= 0 to glyphs.Count-1 do
    begin
      // Get a stroke
      stroke &#58;= glyphs.Stroke&#91;i&#93;;

      x1 &#58;= 10 + round&#40; &#40;stroke.Pt1.X-cbounds.Left&#41; * sx &#41;;
      x2 &#58;= 10 + round&#40; &#40;stroke.Pt2.X-cbounds.Left&#41; * sx &#41;;
      y1 &#58;= 10 + round&#40; &#40;stroke.Pt1.Y-cbounds.Top&#41; * sy &#41;;
      y2 &#58;= 10 + round&#40; &#40;stroke.Pt2.Y-cbounds.Top&#41; * sy &#41;;

      FCharGlyph&#91;loop&#93;.Add&#40;x1/1000, &#40;y1-1&#41;/1000&#41;;
      FCharGlyph&#91;loop&#93;.Add&#40;x2/1000, &#40;y2-1&#41;/1000&#41;;
    end;

  // Free the glyphs
  glyphs.Free;

  FCharWidth&#91;loop&#93; &#58;= cbounds.Right;
  FCharGlyph&#91;loop&#93;.Tesselate&#40;&#41;;
  end;

  end;

  TTF2Vector.Free;
end;

procedure TPolygonFont.RenderChar&#40;value&#58; char&#41;;
begin
  FCharGlyph&#91;ord&#40;value&#41;&#93;.Render&#40;&#41;;
  glTranslatef&#40;&#40;FCharWidth&#91;ord&#40;value&#41;&#93;*fscale&#41;/1000, 0, 0&#41;;
end;

procedure TPolygonFont.RenderString&#40;value&#58; string&#41;;
var
  i&#58; integer;
begin
  for i &#58;=1 to length&#40;value&#41; do
  begin
    RenderChar&#40;value&#91;i&#93;&#41;;
  end;
end;

end.