public static DEffect LoadEffect(XmlDocument xml) { Param.InitKnownTypes(); DEffect effect = new DEffect(); XmlElement effectEl = (XmlElement)xml.SelectSingleNode("/effect"); effect.name = effectEl.Attributes["name"].InnerText; // parse params XmlNodeList paramEls = xml.SelectNodes("/effect/param"); effect._params = new Dictionary <string, Param>(paramEls.Count); for (int i = 0; i < paramEls.Count; i++) { Param p = Param.ParseXmlElement((XmlElement)paramEls[i]); effect._params[p.Name] = p; } // parse shaders XmlNodeList shaderEls = xml.SelectSingleNode("/effect/shaders").ChildNodes; effect.shaders = new Dictionary <string, Shader>(shaderEls.Count); for (int i = 0; i < shaderEls.Count; i++) { Shader s = null; if (shaderEls[i].Name == "vshader") { s = VShader.ParseXml((XmlElement)shaderEls[i]); } else if (shaderEls[i].Name == "pshader") { s = PShader.ParseXml((XmlElement)shaderEls[i]); } effect.shaders[s.ID] = s; } // parse techniques XmlNodeList techniqueEls = effectEl.SelectNodes("technique"); effect.techniques = new Dictionary <string, Technique>(techniqueEls.Count); for (int i = 0; i < techniqueEls.Count; i++) { Technique technique = Technique.ParseXmlElement((XmlElement)techniqueEls[i], effect.shaders); effect.techniques.Add(technique.Name, technique); } effect.ProcessAndVerify(); return(effect); }
public static Technique ParseXmlElement(XmlElement el, Dictionary<string, Shader> shaders) { Technique tech = new Technique(); tech.name = el.Attributes["name"].InnerText; // parse passes XmlNodeList passEls = el.SelectNodes("pass"); tech.passes = new Pass[passEls.Count]; for (int i = 0; i < passEls.Count; i++) { tech.passes[i] = Pass.ParseXmlElement((XmlElement)passEls[i], shaders); } return tech; }
public static Technique ParseXmlElement(XmlElement el, Dictionary <string, Shader> shaders) { Technique tech = new Technique(); tech.name = el.Attributes["name"].InnerText; // parse passes XmlNodeList passEls = el.SelectNodes("pass"); tech.passes = new Pass[passEls.Count]; for (int i = 0; i < passEls.Count; i++) { tech.passes[i] = Pass.ParseXmlElement((XmlElement)passEls[i], shaders); } return(tech); }