public static bool IsFileExisted(IPackageIndexer indexer, string path) { if (indexer == null) { return(false); } return(indexer.GetPackagePath(path) != null); }
public static PackageStream OpenTexture(IPackageIndexer packageIndexer, string path) { var packagePath = packageIndexer.GetPackagePath(path); if (packagePath == null && Path.GetExtension(path) == ".tga") { path = path.Substring(0, path.Length - 4) + ".dds"; packagePath = packageIndexer.GetPackagePath(path); } return(new PackageStream(packagePath, path)); }
public ModelTexture LoadTexture(IPackageIndexer packageIndexer, string texturePath, Device device) { using (var stream = ModelTextureManager.OpenTexture(packageIndexer, texturePath)) { var pos = stream.Position; lock (_textures) { if (!_textures.TryGetValue(texturePath, out ModelTexture texture)) { var info = ImageInformation.FromStream(stream); stream.Seek(pos, SeekOrigin.Begin); texture = new ModelTexture(texturePath, Texture.FromStream(device, stream), info); _textures.Add(texturePath, texture); } else { texture.AddRef(); } return(texture); } } }
public static ImageSource Load(IPackageIndexer indexer, string path, double dpi = 96) { return(PackageImage.Load(indexer.GetPackagePath(path), path, dpi)); }
public PackageStream(IPackageIndexer indexer, string path) : this(indexer.GetPackagePath(path), path) { }
public PackageFileInfo(IPackageIndexer databasePackageIndexer, string fileInPackagePath) { PackageIndexer = databasePackageIndexer; FileInPackagePath = fileInPackagePath; }
internal static SubTankMesh FromModel(ModelVisual modelVisual, ModelPrimitive modelPrimitive, IPackageIndexer packageIndexer, Device device, ModelTextureManager textureManager) { if (modelVisual == null) { return(null); } if (modelPrimitive == null) { return(null); } var mesh = new SubTankMesh(); _textureManager = textureManager; var verticesMap = new Dictionary <string, VertexState>(); foreach (var kv in modelPrimitive.Vertices) { var name = kv.Key; var vlist = kv.Value; verticesMap[name] = TankMesh.ConvertToVertexBuffer(vlist, device); } var indicesMap = new Dictionary <string, IndexBuffer>(); foreach (var kv in modelPrimitive.Indices) { var name = kv.Key; var nlist = kv.Value; indicesMap[name] = TankMesh.ConvertToIndexBuffer(nlist, device); } foreach (var renderSet in modelVisual.RenderSets) { //renderSet.Geometry.PrimitiveName var vState = verticesMap[renderSet.Geometry.VerticesName]; var indices = indicesMap[renderSet.Geometry.IndicesName]; var rawVertices = modelPrimitive.Vertices[renderSet.Geometry.VerticesName].Vertices; var rawIndices = modelPrimitive.Indices[renderSet.Geometry.IndicesName]; foreach (var groupKv in renderSet.Geometry.ModelPrimitiveGroups) { var group = groupKv.Value; RenderGroup renderGroup = null; if (group.Sectioned) { renderGroup = new RenderGroup { MinVertexIndex = (int)group.StartVertex, VerticesCount = (int)group.VerticesCount, StartIndex = (int)group.StartIndex, PrimitiveCount = (int)group.PrimitiveCount, }; } else { renderGroup = new RenderGroup { MinVertexIndex = 0, VerticesCount = vState.Count, StartIndex = 0, PrimitiveCount = ((int)indices.Tag) / 3, }; } renderGroup.VertexState = vState; renderGroup.Indices = indices; renderGroup.RawVertices = rawVertices; renderGroup.RawIndices = rawIndices; if (group.Material.ShowArmor) { renderGroup.RenderArmor = true; renderGroup.Textures = null; renderGroup.Armor = group.Material.Armor; } else { renderGroup.RenderArmor = false; var textures = new Dictionary <string, ModelTexture>(); foreach (var property in group.Material.Propertys) { var texturePath = property.Texture; if (string.IsNullOrWhiteSpace(texturePath)) { if (property.Name == "alphaTestEnable" && group.Material.Fx != "shaders/std_effects/PBS_tank.fx") { renderGroup.AlphaTestEnable = property.BoolValue; } else { switch (property.Name) { case "alphaReference": renderGroup.AlphaReference = property.IntValue; break; case "g_useNormalPackDXT1": renderGroup.UseNormalPackDxt1 = property.BoolValue; break; case "g_detailPower": renderGroup.DetailPower = property.FloatValue; break; case "g_metallicDetailUVTiling": renderGroup.DetailUvTiling = property.Vector4Value; break; case "g_defaultPBSConversionParam": break; case "g_albedoConversions": break; case "g_glossConversions": break; case "g_metallicConversions": break; case "g_defaultPBSConversionParams": break; case "g_albedoCorrection": break; case "g_useDetailMetallic": break; case "g_maskBias": break; case "doubleSided": break; case "alphaTestEnable": break; case "crash_coefficient": break; default: break; } } } else { try { var texture = textureManager.LoadTexture(packageIndexer, texturePath, device); textures[property.Name] = texture; if (property.Name == "normalMap" && !renderGroup.UseNormalBc1) { if (texture.ImageInformation.Format == Format.Dxt1) { renderGroup.UseNormalBc1 = true; } } } catch (Exception) { Log.InfoFormat("can't load texture {0} for {1}", texturePath, property.Name); } } } renderGroup.Textures = textures; } mesh._renderGroups.Add(renderGroup); } } return(mesh); }