@Override
	protected void createDisplayList() {
		Rectangle bounds = glyph.getBounds();

		destWidth = bounds.width;
		destHeight = bounds.height;

		if (destWidth == 0 || destHeight == 0)
			return;

		// int[] rgbarray = new int[this.destWidth*this.destHeight];

		BufferedImage image = new BufferedImage(bounds.width, bounds.height,
				BufferedImage.TYPE_BYTE_GRAY);
		Graphics2D g2d = (Graphics2D) image.getGraphics();
		g2d.scale(1.0f, -1.0f);
		g2d.setColor(Color.BLACK);
		g2d.fillRect(0, 0, bounds.width, bounds.height);
		g2d.setColor(Color.WHITE);
		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_ON);
		g2d.translate(-bounds.getX(), -bounds.getMaxY());
		g2d.fill(glyph);

		// image.getRGB(0, 0, this.destWidth, this.destHeight, rgbarray, 0,
		// this.destWidth);

		byte[] array = new byte[destWidth * destHeight];

		for (int i = 0; i < destHeight; i++)
			for (int j = 0; j < destWidth; j++)
				array[i * destWidth + j] = (byte) image.getRGB(j, i);

		if (destWidth != 0 && destHeight != 0) {
			GL11.glPushClientAttrib(GL11.GL_CLIENT_PIXEL_STORE_BIT);
			GL11.glPixelStorei(GL11.GL_UNPACK_LSB_FIRST, GL11.GL_FALSE);
			GL11.glPixelStorei(GL11.GL_UNPACK_ROW_LENGTH, 0);
			GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1);

			GL11.glBindTexture(GL11.GL_TEXTURE_2D, glTextureID);
			ByteBuffer bb = ByteBuffer.allocateDirect(array.length).order(
					ByteOrder.LITTLE_ENDIAN);
			bb.put(array).flip();
			GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, 0, xOffset, yOffset,
					destWidth, destHeight, GL11.GL_ALPHA,
					GL11.GL_UNSIGNED_BYTE, bb);

			GL11.glPopClientAttrib();
			// 0
			// +----+
			// | |
			// | |
			// | |
			// +----+
			// 1

			uv[0].x = (float) xOffset / width;
			uv[0].y = (float) yOffset / height;
			uv[1].x = (float) (xOffset + destWidth) / width;
			uv[1].y = (float) (yOffset + destHeight) / height;
			assert xOffset == (uv[0].x * width) : "floating point conversion problem (xOffset)";
			assert yOffset == (uv[0].y * height) : "floating point conversion problem (yOffset)";
			assert xOffset + destWidth == (uv[1].x * width) : "floating point conversion problem (xOffset+width)";
			assert yOffset + destHeight == (uv[1].y * height) : "floating point conversion problem (yOffset+height)";
		}

		pos.x = (float) glyph.getBounds().getMinX();
		pos.y = (float) glyph.getBounds().getMaxY();
	}