/// Validate that all geometry stream objects are compatibile. /// eg. If any stream has UseNormals, all must have it. private void ValidateGeometryStream(IGeometryStream geometry) { if (geometry.Geometry.Count() == 0) { throw new MeshFactoryException("No geometry in geometry stream"); } foreach (var gp in geometry.Geometry) { useUV = useUV | gp.UseUV; if (useUV && (!gp.UseUV)) { throw new MeshFactoryException("{0} did not implement UV as required by geometry stream", gp); } useNormals = useNormals | gp.UseNormals; if (useNormals && (!gp.UseNormals)) { throw new MeshFactoryException("{0} did not implement Normals as required by geometry stream", gp); } useColor = useColor | gp.UseColor; if (useColor && (!gp.UseColor)) { throw new MeshFactoryException("{0} did not implement Color as required by geometry stream", gp); } } }
/// Create a new instance from some kind of geometry stream public MeshFactory(IGeometryStream geometry) { ValidateGeometryStream(geometry); this.geometry = geometry; }