public void ModifyEffect(XmlNode effectNode) { string sourceFileName = effectNode.InnerText; if (!File.Exists(sourceFileName) && File.Exists(m_ProjectLocation + @"\" + sourceFileName)) { sourceFileName = m_ProjectLocation + @"\" + sourceFileName; } string effectName = effectNode.Attributes["name"].Value; string destOjbect = m_ProjectLocation + @"\Effects\" + Path.GetFileNameWithoutExtension(sourceFileName) + ".fxo"; if (!CompileEffect(sourceFileName, destOjbect)) { return; } uint size = RenderMethods.ModifyEffect(@"Effects\" + Path.GetFileName(destOjbect), effectName); if (size > 0) { StringBuilder materialtString = new StringBuilder((int)size); RenderMethods.GetMaterialXml(@"Effects\" + Path.GetFileName(destOjbect), materialtString, size); XmlDocument materialDoc = new XmlDocument(); materialDoc.LoadXml(materialtString.ToString()); XmlElement newMaterialNode = materialDoc.DocumentElement; ReSetMaterial(newMaterialNode, effectName); } }
public void AddEffect(string sourceFileName, string effectName, string materialName, bool fromExist) { string destOjbect = m_ProjectLocation + @"\Effects\" + Path.GetFileNameWithoutExtension(sourceFileName) + ".fxo"; bool success = CompileEffect(sourceFileName, destOjbect); { if (Path.GetDirectoryName(sourceFileName) == m_ProjectLocation) { sourceFileName = @"Effects\" + Path.GetFileName(sourceFileName); } string effectXml = string.Format( @"<Effect name=""{0}"" object=""{1}"">{2}</Effect>", effectName, @"Effects\" + Path.GetFileName(destOjbect), sourceFileName); XmlDocument effectDoc = new XmlDocument(); effectDoc.LoadXml(effectXml); XmlElement effectXmlNode = effectDoc.DocumentElement; XmlNode effectRoot = m_XmlDoc.DocumentElement.SelectSingleNode("Effects"); if (effectRoot != null) { effectRoot.AppendChild(m_XmlDoc.ImportNode(effectXmlNode, true)); TreeNode effectsTreeNode = treeViewAssets.Nodes["Effects"]; if (effectsTreeNode != null) { AddEffect(effectsTreeNode, effectRoot.LastChild); } } } if (success && !string.IsNullOrEmpty(materialName)) { uint size = RenderMethods.AddEffect(@"Effects\" + Path.GetFileName(destOjbect), effectName); if (size > 0) { StringBuilder materialtString = new StringBuilder((int)size); RenderMethods.GetMaterialXml(@"Effects\" + Path.GetFileName(destOjbect), materialtString, size); File.WriteAllText(m_ProjectLocation + @"\Materials\" + materialName + ".mat", materialtString.ToString()); string materialtXml = string.Format( @"<Material name=""{0}"">{1}</Material>", materialName, @"Materials\" + materialName + ".mat"); XmlDocument materialDoc = new XmlDocument(); materialDoc.LoadXml(materialtXml.ToString()); XmlElement materialXmlNode = materialDoc.DocumentElement; XmlNode materialRoot = m_XmlDoc.DocumentElement.SelectSingleNode("Materials"); if (materialRoot != null) { materialRoot.AppendChild(m_XmlDoc.ImportNode(materialXmlNode, true)); TreeNode materialsTreeNode = treeViewAssets.Nodes["Materials"]; if (materialsTreeNode != null) { AddMaterial(materialsTreeNode, materialRoot.LastChild); } } } } }