private boolean displayNormals(FTVectoriser vectoriser) {
		GL11.glPushAttrib(GL11.GL_CURRENT_BIT | GL11.GL_LIGHTING_BIT);
		GL11.glDisable(GL11.GL_LIGHTING);
		GL11.glColor3f(1.0f, 0.0f, 0.0f);
		GL11.glBegin(GL11.GL_LINES);
		for (int c = 0; c < vectoriser.contourCount(); ++c) {
			FTContour contour = vectoriser.contour(c);
			int numberOfPoints = contour.pointCount();
			Vector3f oldNormal = FTExtrdGlyph.getNormal(contour.getPoint(0),
					contour.getPoint(1));
			for (int j = 0; j <= numberOfPoints; ++j) {
				int index = (j == numberOfPoints) ? 0 : j;
				int nextIndex = (index == numberOfPoints - 1) ? 0 : index + 1;

				Vector3f flatNormal = FTExtrdGlyph.getNormal(
						contour.getPoint(index), contour.getPoint(nextIndex));
				boolean smoothEdge = Math.abs(oldNormal.angle(flatNormal)) < Math.PI / 4;
				Vector3f normal;
				if (smoothEdge)
					normal = new Vector3f(flatNormal).add(oldNormal).scale(
							1 / 2f);
				else {
					normal = new Vector3f(oldNormal).scale(4f, 4f, 0f);
					GL11.glNormal3f(normal.x, normal.y, 0.0f);
					GL11.glVertex3f(
							(float) contour.getPoint(index)[FTContour.X] /*
																		 * /
																		 * 64.0f
																		 */,
							(float) contour.getPoint(index)[FTContour.Y] /*
																		 * /
																		 * 64.0f
																		 */,
							0.0f); // TODO 64?
					GL11.glVertex3f(
							(float) contour.getPoint(index)[FTContour.X]
									+ normal.x /* / 64.0f */,
							(float) contour.getPoint(index)[FTContour.Y]
									+ normal.y /* / 64.0f */, 0.0f); // TODO
																		// 64?
					GL11.glVertex3f(
							(float) contour.getPoint(index)[FTContour.X] /*
																		 * /
																		 * 64.0f
																		 */,
							(float) contour.getPoint(index)[FTContour.Y] /*
																		 * /
																		 * 64.0f
																		 */,
							-depth);
					GL11.glVertex3f(
							(float) contour.getPoint(index)[FTContour.X]
									+ normal.x /* / 64.0f */,
							(float) contour.getPoint(index)[FTContour.Y]
									+ normal.y /* / 64.0f */, -depth);
				}
				// System.out.print("Contourflag:");
				// switch (vectoriser.contourFlag())
				// {
				// case PathIterator.WIND_EVEN_ODD:
				// System.out.println("even odd");
				// break;
				// case PathIterator.WIND_NON_ZERO:
				// System.out.println("non zero");
				// break;
				// default:
				// System.out.println("unknown");
				// break;
				// }
				normal = new Vector3f(flatNormal).scale(4f, 4f, 0f);
				GL11.glNormal3f(normal.x, normal.y, 0.0f);
				GL11.glVertex3f(
						(float) contour.getPoint(index)[FTContour.X] /* / 64.0f */,
						(float) contour.getPoint(index)[FTContour.Y] /* / 64.0f */,
						0.0f); // TODO 64?
				GL11.glVertex3f(
						(float) contour.getPoint(index)[FTContour.X] + normal.x /*
																				 * /
																				 * 64.0f
																				 */,
						(float) contour.getPoint(index)[FTContour.Y] + normal.y /*
																				 * /
																				 * 64.0f
																				 */,
						0.0f); // TODO 64?
				GL11.glVertex3f(
						(float) contour.getPoint(index)[FTContour.X] /* / 64.0f */,
						(float) contour.getPoint(index)[FTContour.Y] /* / 64.0f */,
						-depth);
				GL11.glVertex3f(
						(float) contour.getPoint(index)[FTContour.X] + normal.x /*
																				 * /
																				 * 64.0f
																				 */,
						(float) contour.getPoint(index)[FTContour.Y] + normal.y /*
																				 * /
																				 * 64.0f
																				 */,
						-depth);
				oldNormal = flatNormal;
			}
		}
		GL11.glEnd();
		GL11.glPopAttrib();
		return true;
	}