Contents / Previous / Next


Fonts and Display Lists

A font typically consists of a set of characters, where each character has an identifying number (usually the ASCII code), and a drawing method. For a standard ASCII character set, the capital letter A is number 65, B is 66, and so on. The string "DAB" would be represented by the three indices 68, 65, 66. In the simplest approach, display-list number 65 would draw an A, number 66 would draw a B, and so on. Then, to draw the string 68, 65, 66, just execute the corresponding display lists.

You need is a contiguous list of unused display-list numbers, which you can obtain from glGenLists(). Use the command glListBase() to set the offset and than glCallLists() (Note: OpenGL allows strings to be composed of one-, two-, three-, or four-byte characters through the type parameter in glCallLists()).
glDeleteLists() makes it easy to delete all the lists associated with a font in a single operation.

Example (C code, alternative JOGL (using Swing and javax.media.opengl.*)):

import java.io.*;
import java.nio.*;
import java.nio.charset.*;
import java.awt.*;
import java.awt.event.*;
import net.java.games.jogl.*;


public class Font {

  private final int asciiOffset = 32;
  private int fontOffset;

  public Font() {}

  public void init( GL gl ) 
    {
      // Init byte buffers with letters.
      for (int i = 0; i < rasters.length; i++) {
	buf[i] = ByteBuffer.allocateDirect( rasters[i].length );
	buf[i].put( rasters[i] );
	buf[i].rewind();
      }
      // An other font with just the letter F.
      bufF = ByteBuffer.allocateDirect( rasterF.length );
      bufF.put( rasterF );
      bufF.rewind();

    // OpenGL init.
    gl.glShadeModel(GL.GL_FLAT);
    makeRasterFont(gl); // Init display lists.
  }

  private void makeRasterFont(GL gl) 
    {
      gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);

      fontOffset = gl.glGenLists(128);
      if( fontOffset == 0 ) {
	System.out.println("GenList Error");
      } else {
	System.out.println("GenList listoffset: "+fontOffset);//ddd
	for (int i = 0; i < rasters.length; i++) 
	{
	  // We start the lists at ASCII Space=20
	  gl.glNewList( fontOffset + asciiOffset + i , GL.GL_COMPILE); {
	    gl.glBitmap( 8, 13, 0.0f, 2.0f, 10.0f, 0.0f, buf[i] );
	  } gl.glEndList();
	}
      }
    }

  public void printString( GL gl, String s ) 
    {
      // Charset charset = Charset.forName("iso-latin-1");
      // System.out.println("charset.name():"+charset.name() );
      // ByteBuffer strbufTmp = charset.encode( s );

      // Copy the string as bytes into a buffer.
      // These bytes are used to select the 
      // displaylists to call for each character.
      ByteBuffer strbuf = ByteBuffer.allocateDirect( s.length() );
      for( int i = 0; i < strbuf.capacity(); i++ ) {
	strbuf.put( (byte)s.charAt(i) ); }
      
      gl.glPushAttrib(GL.GL_LIST_BIT);
      gl.glListBase(fontOffset);
      gl.glCallLists( strbuf.capacity(),//s.length(), 
		    GL.GL_UNSIGNED_BYTE, strbuf );
      gl.glPopAttrib();
    }

  public void draw( GL gl ) 
    {
      drawFont( gl );

      gl.glWindowPos2i(20, 250);
      printString( gl, "The quick brown fox jumps" );
      gl.glWindowPos2i(20, 220);
      printString(gl, "over a lazy dog.");
    }


  public void drawFont( GL gl ) 
    {
    gl.glColor3f( 1f, 1f, 1f );
    gl.glWindowPos2i(10, 120);
    for (int i = 0; i < rasters.length; i++) {
      gl.glBitmap( 8, 13, 0.0f, 2.0f, 10.0f, 0.0f, buf[i] );      
      // Wrap.
      float pos[] = new float[4];
      gl.glGetFloatv( GL.GL_CURRENT_RASTER_POSITION, pos );
      //System.out.println("x"+pos[0]+"y"+pos[1]+"z"+pos[2] );
      if( (int)pos[0] > 260 )
      {
	gl.glWindowPos2i(10, (int)pos[1]-25);
      }
    }
  }


  /////////////  Data //////////////////////////////////

  // Bitmaps for all letters of one font 
  // starting with space.
  private byte rasters [][] = {
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00},
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x36, (byte)0x36, (byte)0x36, (byte)0x36}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x66, (byte)0x66, (byte)0xff, (byte)0x66, (byte)0x66, (byte)0xff, (byte)0x66, (byte)0x66, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x7e, (byte)0xff, (byte)0x1b, (byte)0x1f, (byte)0x7e, (byte)0xf8, (byte)0xd8, (byte)0xff, (byte)0x7e, (byte)0x18}, 
    {(byte)0x00, (byte)0x00, (byte)0x0e, (byte)0x1b, (byte)0xdb, (byte)0x6e, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x76, (byte)0xdb, (byte)0xd8, (byte)0x70}, 
    {(byte)0x00, (byte)0x00, (byte)0x7f, (byte)0xc6, (byte)0xcf, (byte)0xd8, (byte)0x70, (byte)0x70, (byte)0xd8, (byte)0xcc, (byte)0xcc, (byte)0x6c, (byte)0x38}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x18, (byte)0x1c, (byte)0x0c, (byte)0x0e}, 
    {(byte)0x00, (byte)0x00, (byte)0x0c, (byte)0x18, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x18, (byte)0x0c}, 
    {(byte)0x00, (byte)0x00, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x18, (byte)0x30}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x99, (byte)0x5a, (byte)0x3c, (byte)0xff, (byte)0x3c, (byte)0x5a, (byte)0x99, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0xff, (byte)0xff, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x30, (byte)0x18, (byte)0x1c, (byte)0x1c, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xff, (byte)0xff, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x38, (byte)0x38, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x60, (byte)0x60, (byte)0x30, (byte)0x30, (byte)0x18, (byte)0x18, (byte)0x0c, (byte)0x0c, (byte)0x06, (byte)0x06, (byte)0x03, (byte)0x03}, 
    {(byte)0x00, (byte)0x00, (byte)0x3c, (byte)0x66, (byte)0xc3, (byte)0xe3, (byte)0xf3, (byte)0xdb, (byte)0xcf, (byte)0xc7, (byte)0xc3, (byte)0x66, (byte)0x3c}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x78, (byte)0x38, (byte)0x18}, 
    {(byte)0x00, (byte)0x00, (byte)0xff, (byte)0xc0, (byte)0xc0, (byte)0x60, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x06, (byte)0x03, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0x03, (byte)0x03, (byte)0x07, (byte)0x7e, (byte)0x07, (byte)0x03, (byte)0x03, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0xff, (byte)0xcc, (byte)0x6c, (byte)0x3c, (byte)0x1c, (byte)0x0c}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0x03, (byte)0x03, (byte)0x07, (byte)0xfe, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xff}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xc7, (byte)0xfe, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x06, (byte)0x03, (byte)0x03, (byte)0x03, (byte)0xff}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xe7, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0x03, (byte)0x03, (byte)0x03, (byte)0x7f, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x38, (byte)0x38, (byte)0x00, (byte)0x00, (byte)0x38, (byte)0x38, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x30, (byte)0x18, (byte)0x1c, (byte)0x1c, (byte)0x00, (byte)0x00, (byte)0x1c, (byte)0x1c, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x06, (byte)0x0c, (byte)0x18, (byte)0x30, (byte)0x60, (byte)0xc0, (byte)0x60, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x06}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xff, (byte)0xff, (byte)0x00, (byte)0xff, (byte)0xff, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x60, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x06, (byte)0x03, (byte)0x06, (byte)0x0c, (byte)0x18, (byte)0x30, (byte)0x60}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x0c, (byte)0x06, (byte)0x03, (byte)0xc3, (byte)0xc3, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x3f, (byte)0x60, (byte)0xcf, (byte)0xdb, (byte)0xd3, (byte)0xdd, (byte)0xc3, (byte)0x7e, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xff, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0x66, (byte)0x3c, (byte)0x18}, 
    {(byte)0x00, (byte)0x00, (byte)0xfe, (byte)0xc7, (byte)0xc3, (byte)0xc3, (byte)0xc7, (byte)0xfe, (byte)0xc7, (byte)0xc3, (byte)0xc3, (byte)0xc7, (byte)0xfe}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0xfc, (byte)0xce, (byte)0xc7, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc7, (byte)0xce, (byte)0xfc}, 
    {(byte)0x00, (byte)0x00, (byte)0xff, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xfc, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xff}, 
    {(byte)0x00, (byte)0x00, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xfc, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xff}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xcf, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xff, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x7c, (byte)0xee, (byte)0xc6, (byte)0x06, (byte)0x06, (byte)0x06, (byte)0x06, (byte)0x06, (byte)0x06, (byte)0x06, (byte)0x06}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xc6, (byte)0xcc, (byte)0xd8, (byte)0xf0, (byte)0xe0, (byte)0xf0, (byte)0xd8, (byte)0xcc, (byte)0xc6, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0xff, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xdb, (byte)0xff, (byte)0xff, (byte)0xe7, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0xc7, (byte)0xc7, (byte)0xcf, (byte)0xcf, (byte)0xdf, (byte)0xdb, (byte)0xfb, (byte)0xf3, (byte)0xf3, (byte)0xe3, (byte)0xe3}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xfe, (byte)0xc7, (byte)0xc3, (byte)0xc3, (byte)0xc7, (byte)0xfe}, 
    {(byte)0x00, (byte)0x00, (byte)0x3f, (byte)0x6e, (byte)0xdf, (byte)0xdb, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0x66, (byte)0x3c}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xc6, (byte)0xcc, (byte)0xd8, (byte)0xf0, (byte)0xfe, (byte)0xc7, (byte)0xc3, (byte)0xc3, (byte)0xc7, (byte)0xfe}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0x03, (byte)0x03, (byte)0x07, (byte)0x7e, (byte)0xe0, (byte)0xc0, (byte)0xc0, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0xff}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x3c, (byte)0x3c, (byte)0x66, (byte)0x66, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xe7, (byte)0xff, (byte)0xff, (byte)0xdb, (byte)0xdb, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0x66, (byte)0x66, (byte)0x3c, (byte)0x3c, (byte)0x18, (byte)0x3c, (byte)0x3c, (byte)0x66, (byte)0x66, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x3c, (byte)0x3c, (byte)0x66, (byte)0x66, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0xff, (byte)0xc0, (byte)0xc0, (byte)0x60, (byte)0x30, (byte)0x7e, (byte)0x0c, (byte)0x06, (byte)0x03, (byte)0x03, (byte)0xff}, 
    {(byte)0x00, (byte)0x00, (byte)0x3c, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x3c}, 
    {(byte)0x00, (byte)0x03, (byte)0x03, (byte)0x06, (byte)0x06, (byte)0x0c, (byte)0x0c, (byte)0x18, (byte)0x18, (byte)0x30, (byte)0x30, (byte)0x60, (byte)0x60}, 
    {(byte)0x00, (byte)0x00, (byte)0x3c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x3c}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xc3, (byte)0x66, (byte)0x3c, (byte)0x18}, 
    {(byte)0xff, (byte)0xff, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x18, (byte)0x38, (byte)0x30, (byte)0x70}, 
    {(byte)0x00, (byte)0x00, (byte)0x7f, (byte)0xc3, (byte)0xc3, (byte)0x7f, (byte)0x03, (byte)0xc3, (byte)0x7e, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xfe, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xfe, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xc3, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc3, (byte)0x7e, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x7f, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0x7f, (byte)0x03, (byte)0x03, (byte)0x03, (byte)0x03, (byte)0x03}, 
    {(byte)0x00, (byte)0x00, (byte)0x7f, (byte)0xc0, (byte)0xc0, (byte)0xfe, (byte)0xc3, (byte)0xc3, (byte)0x7e, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0xfc, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x33, (byte)0x1e}, 
    {(byte)0x7e, (byte)0xc3, (byte)0x03, (byte)0x03, (byte)0x7f, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0x7e, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xfe, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x00, (byte)0x00, (byte)0x18, (byte)0x00}, 
    {(byte)0x38, (byte)0x6c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x00, (byte)0x00, (byte)0x0c, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc6, (byte)0xcc, (byte)0xf8, (byte)0xf0, (byte)0xd8, (byte)0xcc, (byte)0xc6, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x78}, 
    {(byte)0x00, (byte)0x00, (byte)0xdb, (byte)0xdb, (byte)0xdb, (byte)0xdb, (byte)0xdb, (byte)0xdb, (byte)0xfe, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xfc, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x7c, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0x7c, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xfe, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xfe, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x03, (byte)0x03, (byte)0x03, (byte)0x7f, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0x7f, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xe0, (byte)0xfe, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xfe, (byte)0x03, (byte)0x03, (byte)0x7e, (byte)0xc0, (byte)0xc0, (byte)0x7f, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x1c, (byte)0x36, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0xfc, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x3c, (byte)0x3c, (byte)0x66, (byte)0x66, (byte)0xc3, (byte)0xc3, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xe7, (byte)0xff, (byte)0xdb, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0x66, (byte)0x3c, (byte)0x18, (byte)0x3c, (byte)0x66, (byte)0xc3, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0xc0, (byte)0x60, (byte)0x60, (byte)0x30, (byte)0x18, (byte)0x3c, (byte)0x66, (byte)0x66, (byte)0xc3, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xff, (byte)0x60, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x06, (byte)0xff, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x0f, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x38, (byte)0xf0, (byte)0x38, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x0f}, 
    {(byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18}, 
    {(byte)0x00, (byte)0x00, (byte)0xf0, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x1c, (byte)0x0f, (byte)0x1c, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0xf0},
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x06, (byte)0x8f, (byte)0xf1, (byte)0x60, (byte)0x00, (byte)0x00, (byte)0x00},
  };


  // Buffers for all font-bitmap byte arrays.
  // The glBitmap function is the current jogl version (1.1.1)
  // requires a byte buffer not an array.
  ByteBuffer buf[] = new ByteBuffer[rasters.length];
}

To incorporate and use this font add the following lines to your JOGL template:
  Font font = new Font(); // global.

  font.init( gl ); // In init function.

  font.draw( gl ); // In display function.
  gl.glWindowPos2i(20, 20);
  font.printString( gl, new String("This is it.") );