Exemple #1
0
 public static IReadOnlyList <Mesh> CreateMeshes <TvP, TvM, TvJ>(this ModelRoot root, params Geometry.MeshBuilder <Materials.MaterialBuilder, TvP, TvM, TvJ>[] meshBuilders)
     where TvP : struct, Geometry.VertexTypes.IVertexPosition
     where TvM : struct, Geometry.VertexTypes.IVertexMaterial
     where TvJ : struct, Geometry.VertexTypes.IVertexJoints
 {
     return(root.CreateMeshes(mb => root.CreateMaterial(mb), meshBuilders));
 }
        public static IReadOnlyList <Mesh> CreateMeshes(this ModelRoot root, params IMeshBuilder <Materials.MaterialBuilder>[] meshBuilders)
        {
            // until this point, even if the multiple material instances used by the meshes have the same content definition,
            // we must handling material equality by its object reference and nothing else, because Materials.MaterialBuilder
            // is a mutable object, and we cannot guarantee two material instances will keep having the same content.

            // it is at this point where we can coalesce materials with the same content.

            // TODO: in order to coalesce MaterialBuilder instances with same content
            // an IMeshBuilder could wrap the incoming mesh, and merge primitives with shared meshes.

            // MaterialBuilder instances can be grouped by their content, so we use this dictionary
            // to reduce the number of equal materials. This is specially useful for the default material.

            var materials = new Dictionary <Materials.MaterialBuilder, Material>(Materials.MaterialBuilder.ContentComparer);

            Material matFactory(Materials.MaterialBuilder srcMat)
            {
                if (materials.TryGetValue(srcMat, out Schema2.Material dstMat))
                {
                    return(dstMat);
                }
                return(materials[srcMat] = root.CreateMaterial(srcMat));
            }

            return(root.CreateMeshes(matFactory, meshBuilders));
        }
Exemple #3
0
 public static Mesh CreateMesh <TMaterial, TvP, TvM, TvJ>(this ModelRoot root, Func <TMaterial, Material> materialEvaluator, Geometry.MeshBuilder <TMaterial, TvP, TvM, TvJ> meshBuilder)
     where TvP : struct, Geometry.VertexTypes.IVertexPosition
     where TvM : struct, Geometry.VertexTypes.IVertexMaterial
     where TvJ : struct, Geometry.VertexTypes.IVertexJoints
 {
     return(root.CreateMeshes(materialEvaluator, meshBuilder).First());
 }
Exemple #4
0
 public static Mesh CreateMesh <TvP, TvM, TvJ>(this ModelRoot root, Geometry.MeshBuilder <Materials.MaterialBuilder, TvP, TvM, TvJ> meshBuilder)
     where TvP : struct, Geometry.VertexTypes.IVertexPosition
     where TvM : struct, Geometry.VertexTypes.IVertexMaterial
     where TvJ : struct, Geometry.VertexTypes.IVertexJoints
 {
     return(root.CreateMeshes(meshBuilder).First());
 }
 public static IReadOnlyList <Mesh> CreateMeshes <TvP, TvM, TvS>(this ModelRoot root, params Geometry.MeshBuilder <Material, TvP, TvM, TvS>[] meshBuilders)
     where TvP : struct, Geometry.VertexTypes.IVertexPosition
     where TvM : struct, Geometry.VertexTypes.IVertexMaterial
     where TvS : struct, Geometry.VertexTypes.IVertexSkinning
 {
     return(root.CreateMeshes(m => m, meshBuilders));
 }
 public static Mesh CreateMesh <TvP, TvM, TvS>(this ModelRoot root, Geometry.MeshBuilder <Material, TvP, TvM, TvS> meshBuilder)
     where TvP : struct, Geometry.VertexTypes.IVertexPosition
     where TvM : struct, Geometry.VertexTypes.IVertexMaterial
     where TvS : struct, Geometry.VertexTypes.IVertexSkinning
 {
     return(root.CreateMeshes(meshBuilder).First());
 }
        public static IReadOnlyList <Mesh> CreateMeshes <TMaterial>(this ModelRoot root, Func <TMaterial, Material> materialEvaluator, params IMeshBuilder <TMaterial>[] meshBuilders)
        {
            Guard.NotNull(root, nameof(root));
            Guard.NotNull(materialEvaluator, nameof(materialEvaluator));
            Guard.NotNull(meshBuilders, nameof(meshBuilders));

            return(root.CreateMeshes(materialEvaluator, true, meshBuilders));
        }
Exemple #8
0
        public static IReadOnlyList <Mesh> CreateMeshes <TMaterial>(this ModelRoot root, Converter <TMaterial, Material> materialConverter, params IMeshBuilder <TMaterial>[] meshBuilders)
        {
            Guard.NotNull(root, nameof(root));
            Guard.NotNull(materialConverter, nameof(materialConverter));
            Guard.NotNull(meshBuilders, nameof(meshBuilders));

            return(root.CreateMeshes(materialConverter, Scenes.SceneBuilderSchema2Settings.Default, meshBuilders));
        }
 public static Mesh CreateMesh <TMaterial>(this ModelRoot root, Func <TMaterial, Material> materialEvaluator, IMeshBuilder <TMaterial> mesh)
 {
     return(root.CreateMeshes <TMaterial>(materialEvaluator, mesh)[0]);
 }
 public static Mesh CreateMesh(this ModelRoot root, IMeshBuilder <Materials.MaterialBuilder> mesh)
 {
     return(root.CreateMeshes(mesh)[0]);
 }