- 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)
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.
- fcreateBitmapFont :: CString -> IO Font
- createBitmapFont :: String -> IO Font
- fcreateBufferFont :: CString -> IO Font
- createBufferFont :: String -> IO Font
- fcreateOutlineFont :: CString -> IO Font
- createOutlineFont :: String -> IO Font
- fcreatePixmapFont :: CString -> IO Font
- createPixmapFont :: String -> IO Font
- fcreatePolygonFont :: CString -> IO Font
- createPolygonFont :: String -> IO Font
- fcreateTextureFont :: CString -> IO Font
- createTextureFont :: String -> IO Font
- fcreateExtrudeFont :: CString -> IO Font
- createExtrudeFont :: String -> IO Font
- createSimpleLayout :: IO Layout
- setLayoutFont :: Layout -> Font -> IO ()
- fgetLayoutFont :: Layout -> IO Font
- setLayoutLineLength :: Layout -> CFloat -> IO ()
- fgetLayoutLineLength :: Layout -> IO CFloat
- getLayoutLineLength :: Layout -> Float
- fsetLayoutAlignment :: Layout -> CInt -> IO ()
- fgetLayoutAlignment :: Layout -> IO CInt
- getLayoutAlignment :: Layout -> TextAlignment
- fsetLayoutLineSpacing :: Layout -> CFloat -> IO ()
- setLayoutLineSpacing :: Layout -> Float -> IO ()
- destroyFont :: Font -> IO ()
- fattachFile :: Font -> CString -> IO ()
- attachFile :: Font -> String -> IO ()
- attachData :: Font -> Ptr () -> IO ()
- fsetFontCharMap :: Font -> CInt -> IO ()
- setCharMap :: Font -> CharMap -> IO ()
- fgetFontCharMapCount :: Font -> IO CInt
- getFontCharMapCount :: Font -> Int
- fgetFontCharMapList :: Font -> IO (Ptr CInt)
- fsetFontFaceSize :: Font -> CInt -> CInt -> IO CInt
- setFontFaceSize :: Font -> Int -> Int -> IO CInt
- fgetFontFaceSize :: Font -> IO CInt
- getFontFaceSize :: Font -> Int
- fsetFontDepth :: Font -> CFloat -> IO ()
- setFontDepth :: Font -> Float -> IO ()
- fsetFontOutset :: Font -> CFloat -> CFloat -> IO ()
- setFontOutset :: Font -> Float -> Float -> IO ()
- fgetFontBBox :: Font -> CString -> Int -> Ptr CFloat -> IO ()
- getFontBBox :: Font -> String -> [Float]
- fgetFontAscender :: Font -> CFloat
- getFontAscender :: Font -> Float
- fgetFontDescender :: Font -> CFloat
- getFontDescender :: Font -> Float
- fgetFontLineHeight :: Font -> CFloat
- getFontLineHeight :: Font -> Float
- fgetFontAdvance :: Font -> CString -> IO CFloat
- getFontAdvance :: Font -> String -> Float
- frenderFont :: Font -> CString -> CInt -> IO ()
- renderFont :: Font -> String -> RenderMode -> IO ()
- fgetFontError :: Font -> IO CInt
- getFontError :: Font -> Int
- destroyLayout :: Layout -> IO ()
- frenderLayout :: Layout -> CString -> IO ()
- fgetLayoutError :: Layout -> IO CInt
- data RenderMode
- data TextAlignment
- marshalRenderMode :: RenderMode -> CInt
- marshalTextAlignment :: TextAlignment -> CInt
- readTextAlignment :: CInt -> TextAlignment
- data Glyph_Opaque
- data Font_Opaque
- data Layout_Opaque
- type Glyph = Ptr Glyph_Opaque
- type Font = Ptr Font_Opaque
- type Layout = Ptr Layout_Opaque
- data CharMap
- encodeTag :: Char -> Char -> Char -> Char -> CInt
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
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.
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.
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.
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.
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.
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.
Get the embedded font from the Layout
Set the line length, I believe in OpenGL units, although I'm not sure.
Get the line length in points (1:72in) of lines in the layout
Get the number of characters loaded into the current charmap for the font.
Get the different character mappings available in this font.
Get the text extents of a string as a list of (llx,lly,lly,urx,ury,urz)
Get the horizontal span of a string of text using the current font. Input as the xcoord | in any translate operation
Render a string of text in the current font.
Get any errors associated with loading a font. FIXME return should be a type, not an Int.
Get any errors associated with a layout.
Whether or not in polygonal or extrusion mode, the font will render equally front and back
In a Layout directed render, the layout mode of the text
An opaque type encapsulating a glyph in C. Currently the glyph functions are unimplemented in Haskell.