FTGL-1.1: Portable TrueType font rendering for OpenGL using the Freetype2 library



  • Author: Jefferson Heard (jefferson.r.heard at gmail.com)
  • Copyright 2008 Renaissance Computing Institute http://www.renci.org
  • License: GNU LGPL
  • Compatibility GHC (I could change the data declarations to not be empty and that would make it more generally compatible, I believe)
  • Description:

Use FreeType 2 Fonts in OpenGL. Requires the FTGL library and FreeType libraries. available at http://ftgl.wiki.sourceforge.net/ . The most important functions for everyday use are renderFont and the create*Font family of functions. To render a simple string inside OpenGL, assuming you have OpenGL initialized and a current pen color, all you need is:

 do font <- createTextureFont "Font.ttf"
   setFontFaceSize font 24 72
   renderFont font "Hello world!"

Fonts are rendered so that a single point is an OpenGL unit, and a point is 1:72 of an inch.



createBitmapFont :: String -> IO FontSource

Create a bitmapped version of a TrueType font. Bitmapped versions will not | respond to matrix transformations, but rather must be transformed using the | raster positioning functions in OpenGL

createBufferFont :: String -> IO FontSource

Create a buffered version of a TrueType font. This stores the entirety of | a string in a texture, buffering it before rendering. Very fast if you | will be repeatedly rendering the same strings over and over.

createOutlineFont :: String -> IO FontSource

Create an outline version of a TrueType font. This uses actual geometry | and will scale independently without loss of quality. Faster than polygons | but slower than texture or buffer fonts.

createPixmapFont :: String -> IO FontSource

Create a pixmap version of a TrueType font. Higher quality than the bitmap | font without losing any performance. Use this if you don't mind using | set and get RasterPosition.

createPolygonFont :: String -> IO FontSource

Create polygonal display list fonts. These scale independently without | losing quality, unlike texture or buffer fonts, but can be impractical | for large amounts of text because of the high number of polygons needed. | Additionally, they do not, unlike the textured fonts, create artifacts | within the square formed at the edge of each character.

createTextureFont :: String -> IO FontSource

Create textured display list fonts. These can scale somewhat well, | but lose quality quickly. They are much faster than polygonal fonts, | though, so are suitable for large quantities of text. Especially suited | well to text that changes with most frames, because it doesn't incur the | (normally helpful) overhead of buffering.

createExtrudeFont :: String -> IO FontSource

Create a 3D extruded font. This is the only way of creating 3D fonts | within FTGL. Could be fun to use a geometry shader to get different | effects by warping the otherwise square nature of the font. Polygonal. | Scales without losing quality. Slower than all other fonts.

createSimpleLayout :: IO LayoutSource

Create a simple layout

setLayoutFont :: Layout -> Font -> IO ()Source

Set the layout's font.

setLayoutLineLength :: Layout -> CFloat -> IO ()Source

Get the embedded font from the Layout

Set the line length, I believe in OpenGL units, although I'm not sure.

getLayoutLineLength :: Layout -> FloatSource

Get the line length in points (1:72in) of lines in the layout

fgetLayoutAlignment :: Layout -> IO CIntSource

Set the layout alignment

getLayoutAlignment :: Layout -> TextAlignmentSource

Get the alignment of text in this layout.

setLayoutLineSpacing :: Layout -> Float -> IO ()Source

Set layout line spacing in OpenGL units.

destroyFont :: Font -> IO ()Source

Destroy a font

attachFile :: Font -> String -> IO ()Source

Attach a metadata file to a font.

attachData :: Font -> Ptr () -> IO ()Source

Attach some external data (often kerning) to the font

fsetFontCharMap :: Font -> CInt -> IO ()Source

Set the font's character map

getFontCharMapCount :: Font -> IntSource

Get the number of characters loaded into the current charmap for the font.

fsetFontFaceSize :: Font -> CInt -> CInt -> IO CIntSource

Get the different character mappings available in this font.

getFontFaceSize :: Font -> IntSource

Get the current font face size in points.

getFontBBox :: Font -> String -> [Float]Source

Get the text extents of a string as a list of (llx,lly,lly,urx,ury,urz)

getFontAscender :: Font -> FloatSource

Get the global ascender height for the face.

getFontDescender :: Font -> FloatSource

Gets the global descender height for the face.

getFontLineHeight :: Font -> FloatSource

Gets the global line spacing for the face.

getFontAdvance :: Font -> String -> FloatSource

Get the horizontal span of a string of text using the current font. Input as the xcoord | in any translate operation

renderFont :: Font -> String -> RenderMode -> IO ()Source

Render a string of text in the current font.

getFontError :: Font -> IntSource

Get any errors associated with loading a font. FIXME return should be a type, not an Int.

fgetLayoutError :: Layout -> IO CIntSource

Render a string of text within a layout.

data RenderMode Source

Get any errors associated with a layout.

Whether or not in polygonal or extrusion mode, the font will render equally front and back



data TextAlignment Source

In a Layout directed render, the layout mode of the text

data Glyph_Opaque Source

An opaque type encapsulating a glyph in C. Currently the glyph functions are unimplemented in Haskell.

data Font_Opaque Source

An opaque type encapsulating a font in C.

data Layout_Opaque Source

An opaque type encapsulating a layout in C