/// <summary>
 ///     Renders a given mesh at the given position.
 ///		Color, scale, rotation and offset all effect the rendering of an mesh.
 /// </summary>
 /// <param name="mesh">Mesh to render.</param>
 /// <param name="x">Position on the x-axis to render mesh.</param>
 /// <param name="y">Position on the y-axis to render mesh.</param>
 /// <param name="z">Position on the z-axis to render mesh.</param>
 public static void RenderMesh(Mesh mesh, float x, float y, float z)
 {
     _driver.RenderMesh(mesh, x, y, z);
 }
 /// <summary>
 ///		Saves the given mesh to an mesh file.
 /// </summary>
 /// <param name="url">Location to save the mesh to.</param>
 /// <param name="mesh">Mesh to save to file.</param>
 /// <param name="flags">Bitmask of flags describing how to save the mesh.</param>
 public static bool SaveMesh(object url, Mesh mesh, VertexMapSaveFlags flags)
 {
     return VertexMapFactory.SaveVertexMap(url, mesh.VertexMap, flags);
 }
        /// <summary>
        ///		Loads an mesh as renderable data.
        /// </summary>
        /// <param name="path">Memory location (or url) of mesh file to load.</param>
        /// <param name="cache">If set to true this image is added to the resource cache to save loading
        ///                     time when this image is requested again.</param>
        /// <param name="flags">Describes how this image should be loaded, rendered and stored.</param>
        /// <returns>A new instance of the Image class if the image file can be loaded.</returns>
        public static Mesh LoadMesh(object path, MeshFlags flags, bool cache)
        {
            if (ResourceManager.ResourceIsCached(path.ToString()) == true)
            {
                DebugLogger.WriteLog("Loading mesh " + path.ToString() + " from cache.");
                return (Mesh)ResourceManager.RetrieveResource(path.ToString());
            }

            DebugLogger.WriteLog("Loading mesh from " + path.ToString() + ".");
            Mesh mesh = new Mesh(path, flags);
            if (cache == true)
            {
                if ((flags & MeshFlags.Dynamic) != 0)
                    throw new Exception("Dynamic meshs cannot be cached.");
                ResourceManager.CacheResource(path.ToString(), mesh);
            }
            return mesh;
        }