Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
                        }
                    }
                }
            }
        }