Only calculate normals as many times as needed, add support for specifying the glDrawingMode (if desired)