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); } } }
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); } }
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); } }
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); } }
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"))); } }
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")); } }
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); } } }
// 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}"); } } }
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}"); } } }
public OverwatchMaterial(FindLogic.Combo.ComboInfo info, FindLogic.Combo.MaterialInfo materialInfo) { Info = info; MaterialInfo = materialInfo; }