public void ErrorCheck() { if (BFRESRender != null) { List <Errors> Errors = new List <Errors>(); foreach (FMDL model in BFRESRender.models) { foreach (FSHP shp in model.shapes) { if (!IsWiiU) { Syroot.NintenTools.NSW.Bfres.VertexBuffer vtx = shp.VertexBuffer; Syroot.NintenTools.NSW.Bfres.Material mat = shp.GetMaterial().Material; Syroot.NintenTools.NSW.Bfres.ShaderAssign shdr = mat.ShaderAssign; for (int att = 0; att < vtx.Attributes.Count; att++) { if (!shdr.AttribAssigns.Contains(vtx.Attributes[att].Name)) { MessageBox.Show($"Error! Attribute {vtx.Attributes[att].Name} is unlinked!"); } } for (int att = 0; att < mat.TextureRefs.Count; att++) { if (!shdr.SamplerAssigns.Contains(mat.SamplerDict.GetKey(att))) //mat.SamplerDict[att] { MessageBox.Show($"Error! Sampler {mat.SamplerDict.GetKey(att)} is unlinked!"); } } } else { Syroot.NintenTools.Bfres.VertexBuffer vtx = shp.VertexBufferU; Syroot.NintenTools.Bfres.Material mat = shp.GetMaterial().MaterialU; Syroot.NintenTools.Bfres.ShaderAssign shdr = mat.ShaderAssign; for (int att = 0; att < vtx.Attributes.Count; att++) { if (!shdr.AttribAssigns.ContainsKey(vtx.Attributes[att].Name)) { MessageBox.Show($"Error! Attribute {vtx.Attributes[att].Name} is unlinked!"); } } for (int att = 0; att < mat.TextureRefs.Count; att++) { string samp = ""; mat.Samplers.TryGetKey(mat.Samplers[att], out samp); if (!shdr.SamplerAssigns.ContainsKey(samp)) //mat.SamplerDict[att] { MessageBox.Show($"Error! Sampler {samp} is unlinked!"); } } } } } // ErrorList errorList = new ErrorList(); // errorList.LoadList(Errors); // errorList.Show(); } }
public void Replace(string path, bool UseReplaceDialog) { if (GetResFileU() != null) { if (UseReplaceDialog) { MaterialReplaceDialog dialog = new MaterialReplaceDialog(); if (dialog.ShowDialog() == DialogResult.OK) { var mat = new ResU.Material(); mat.Import(path, GetResFileU()); if (PluginRuntime.MaterialReplace.SwapRenderInfos) { MaterialU.RenderInfos = mat.RenderInfos; } if (PluginRuntime.MaterialReplace.SwapShaderOptions) { MaterialU.ShaderAssign = mat.ShaderAssign; } if (PluginRuntime.MaterialReplace.SwapShaderParams) { MaterialU.ShaderParamData = mat.ShaderParamData; MaterialU.ShaderParams = mat.ShaderParams; } if (PluginRuntime.MaterialReplace.SwapTextures) { MaterialU.ShaderAssign.SamplerAssigns = mat.ShaderAssign.SamplerAssigns; MaterialU.TextureRefs = mat.TextureRefs; MaterialU.Samplers = mat.Samplers; } if (PluginRuntime.MaterialReplace.SwapUserData) { MaterialU.UserData = mat.UserData; } } } else { MaterialU.Import(path, GetResFileU()); MaterialU.Name = Text; BfresWiiU.ReadMaterial(this, MaterialU); } } else { if (UseReplaceDialog) { MaterialReplaceDialog dialog = new MaterialReplaceDialog(); if (dialog.ShowDialog() == DialogResult.OK) { var mat = new Material(); mat.Import(path); if (PluginRuntime.MaterialReplace.SwapRenderInfos) { Material.RenderInfoDict = mat.RenderInfoDict; Material.RenderInfos = mat.RenderInfos; } if (PluginRuntime.MaterialReplace.SwapShaderOptions) { Material.ShaderAssign = mat.ShaderAssign; } if (PluginRuntime.MaterialReplace.SwapShaderParams) { Material.ShaderParamData = mat.ShaderParamData; Material.ShaderParams = mat.ShaderParams; Material.ShaderParamDict = mat.ShaderParamDict; } if (PluginRuntime.MaterialReplace.SwapTextures) { Material.ShaderAssign.SamplerAssigns = mat.ShaderAssign.SamplerAssigns; Material.TextureRefs = mat.TextureRefs; Material.Samplers = mat.Samplers; Material.SamplerDict = mat.SamplerDict; Material.SamplerSlotArray = mat.SamplerSlotArray; Material.TextureSlotArray = mat.TextureSlotArray; } if (PluginRuntime.MaterialReplace.SwapUserData) { Material.UserDatas = mat.UserDatas; Material.UserDataDict = mat.UserDataDict; } } } else { Material.Import(path); Material.Name = Text; BfresSwitch.ReadMaterial(this, Material); } } }