Example #1
0
            public void Write(Stream output, FindLogic.Combo.ComboInfo info, FindLogic.Combo.MaterialInfo materialInfo)
            {
                using (BinaryWriter writer = new BinaryWriter(output)) {
                    FindLogic.Combo.MaterialDataInfo materialDataInfo = info.MaterialDatas[materialInfo.MaterialData];
                    writer.Write(VersionMajor);
                    writer.Write(VersionMinor);
                    writer.Write(materialDataInfo.Textures.LongCount());
                    writer.Write((uint)OWMatType.Material);
                    writer.Write(GUID.Index(materialInfo.Shader));
                    writer.Write(materialInfo.IDs.Count);
                    foreach (ulong id in materialInfo.IDs)
                    {
                        writer.Write(id);
                    }

                    foreach (KeyValuePair <ulong, ImageDefinition.ImageType> texture in materialDataInfo.Textures)
                    {
                        if (info.Textures.ContainsKey(texture.Key))
                        {
                            FindLogic.Combo.TextureInfoNew textureInfo = info.Textures[texture.Key];
                            writer.Write($"..\\Textures\\{textureInfo.GetNameIndex()}.dds");
                        }
                        else
                        {
                            writer.Write("");
                        }

                        writer.Write((uint)texture.Value);
                    }
                }
            }
Example #2
0
        public static void SaveMaterial(ICLIFlags flags, string path, FindLogic.Combo.ComboInfo info, ulong material)
        {
            FindLogic.Combo.MaterialInfo     materialInfo     = info.Materials[material];
            FindLogic.Combo.MaterialDataInfo materialDataInfo = info.MaterialDatas[materialInfo.MaterialData];

            Model.OWMatWriter14 materialWriter = new Model.OWMatWriter14();

            string textureDirectory = Path.Combine(path, "Textures");

            if (info.SaveRuntimeData.Threads)
            {
                info.SaveRuntimeData.Tasks.Add(Task.Run(() => {
                    SaveOWMaterialFile(path, materialInfo, materialWriter, info);
                }));
            }
            else
            {
                SaveOWMaterialFile(path, materialInfo, materialWriter, info);
            }

            foreach (KeyValuePair <ulong, ImageDefinition.ImageType> texture in materialDataInfo.Textures)
            {
                SaveTexture(flags, textureDirectory, info, texture.Key);
            }
        }
Example #3
0
        public static void SaveOWMaterialFile(string path, FindLogic.Combo.MaterialInfo materialInfo, Model.OWMatWriter14 materialWriter, FindLogic.Combo.ComboInfo info)
        {
            string materialPath =
                Path.Combine(path, "Materials", $"{materialInfo.GetNameIndex()}{materialWriter.Format}");

            CreateDirectoryFromFile(materialPath);
            using (Stream materialOutputStream = File.OpenWrite(materialPath)) {
                materialOutputStream.SetLength(0);
                materialWriter.Write(materialOutputStream, info, materialInfo);
            }
        }
Example #4
0
        public static void SaveOWMaterialFile(string path, FindLogic.Combo.MaterialInfo materialInfo, FindLogic.Combo.ComboInfo info)
        {
            Model.OverwatchMaterial material = new Model.OverwatchMaterial(info, materialInfo);
            string materialPath =
                Path.Combine(path, "Materials", $"{materialInfo.GetNameIndex()}.{material.Extension}");

            CreateDirectoryFromFile(materialPath);
            using (Stream materialOutputStream = File.OpenWrite(materialPath)) {
                materialOutputStream.SetLength(0);
                material.Write(materialOutputStream);
            }
        }
Example #5
0
        private static void SaveShader(string path, FindLogic.Combo.MaterialInfo materialInfo, FindLogic.Combo.ComboInfo info)
        {
            string shaderDirectory = Path.Combine(path, "Shaders", $"{materialInfo.MaterialData:X16}");

            //WriteFile(materialInfo.ShaderGroup, shaderDirectory);
            //WriteFile(materialInfo.ShaderSource, shaderDirectory);
            foreach (var(instance, code, byteCode) in materialInfo.Shaders)
            {
                //var instancePath = Path.Combine(shaderDirectory, $"{instance:X12}");
                //WriteFile(instance, instancePath);
                //WriteFile(code, instancePath);
                WriteFile(byteCode, Path.Combine(shaderDirectory, Path.ChangeExtension(teResourceGUID.AsString(code), "fxc")));
            }
        }
Example #6
0
File: Combo.cs Project: ipud2/OWLib
        private static void SaveShader(string path, FindLogic.Combo.MaterialInfo materialInfo, FindLogic.Combo.ComboInfo info)
        {
            string shaderDirectory = Path.Combine(path, "Shaders", $"{materialInfo.MaterialData:X16}");
            var    fn = teResourceGUID.LongKey(materialInfo.ShaderGroup).ToString("X12");

            WriteFile(materialInfo.ShaderGroup, shaderDirectory, $"{fn}.shadergroup");
            WriteFile(materialInfo.ShaderSource, shaderDirectory, $"{fn}.hlsl");
            foreach (var(instance, code, byteCode) in materialInfo.Shaders)
            {
                //var instancePath = Path.Combine(shaderDirectory, $"{instance:X12}");
                var codefn = $"{fn}{Path.DirectorySeparatorChar}{teResourceGUID.LongKey(code):X12}";
                WriteFile(instance, shaderDirectory, $"{codefn}.fxi");
                WriteFile(code, shaderDirectory, $"{codefn}.owfx");
                WriteFile(byteCode, Path.Combine(shaderDirectory, $"{codefn}.fxc"));
            }
        }
Example #7
0
        public static void SaveMaterial(ICLIFlags flags, string path, FindLogic.Combo.ComboInfo info, ulong material)
        {
            FindLogic.Combo.MaterialInfo     materialInfo     = info.Materials[material];
            FindLogic.Combo.MaterialDataInfo materialDataInfo = info.MaterialDatas[materialInfo.MaterialData];

            string textureDirectory = Path.Combine(path, "Textures");

            SaveOWMaterialFile(path, materialInfo, info);

            if (materialDataInfo.Textures != null)
            {
                foreach (KeyValuePair <ulong, uint> texture in materialDataInfo.Textures)
                {
                    SaveTexture(flags, textureDirectory, info, texture.Key);
                }
            }
        }
Example #8
0
            // ver 2.0+ writes materials seperately from ModelLooks

            public void Write(Stream output, FindLogic.Combo.ComboInfo info, FindLogic.Combo.ModelLookInfo modelLookInfo)
            {
                using (BinaryWriter writer = new BinaryWriter(output)) {
                    writer.Write(VersionMajor);
                    writer.Write(VersionMinor);
                    if (modelLookInfo.Materials == null)
                    {
                        writer.Write(0L);
                        writer.Write((uint)OWMatType.ModelLook);
                        return;
                    }
                    writer.Write(modelLookInfo.Materials.LongCount());
                    writer.Write((uint)OWMatType.ModelLook);

                    foreach (ulong modelLookMaterial in modelLookInfo.Materials)
                    {
                        FindLogic.Combo.MaterialInfo materialInfo = info.Materials[modelLookMaterial];
                        writer.Write($"..\\..\\Materials\\{materialInfo.GetNameIndex()}{Format}");
                    }
                }
            }
Example #9
0
File: Model.cs Project: ipud2/OWLib
            public void Write(Stream stream)
            {
                using (BinaryWriter writer = new BinaryWriter(stream)) {
                    writer.Write(OverwatchMaterial.VersionMajor);
                    writer.Write(OverwatchMaterial.VersionMinor);
                    if (ModelLookInfo.Materials == null)
                    {
                        writer.Write(0L);
                        writer.Write((uint)OverwatchMaterial.OWMatType.ModelLook);
                        return;
                    }
                    writer.Write(ModelLookInfo.Materials.LongCount());
                    writer.Write((uint)OverwatchMaterial.OWMatType.ModelLook);

                    foreach (ulong modelLookMaterial in ModelLookInfo.Materials)
                    {
                        FindLogic.Combo.MaterialInfo materialInfo = Info.Materials[modelLookMaterial];
                        writer.Write($"..\\..\\Materials\\{materialInfo.GetNameIndex()}.{Extension}");
                    }
                }
            }
Example #10
0
File: Model.cs Project: ipud2/OWLib
 public OverwatchMaterial(FindLogic.Combo.ComboInfo info, FindLogic.Combo.MaterialInfo materialInfo)
 {
     Info         = info;
     MaterialInfo = materialInfo;
 }