public MaterialFile GetTemplateItems() { if (m_templateItems == null) { m_templateItems = ReadMaterialXml(m_templateDir + "/template_items.xml"); m_templateItems.AddParam("state", "anisotropy", "-1", null, null, null); } return(m_templateItems); }
private MaterialFile ReadMaterialXml(String xmlPath) { MaterialFile newMaterial = null; try { using (XmlReader xmlReader = XmlReader.Create(xmlPath)) { xmlReader.MoveToContent(); newMaterial = new MaterialFile(); bool isAnisotropy = false; int anisotropyValue = 0; while (xmlReader.Read()) { if (xmlReader.Name == "shader") { newMaterial.AddParam(xmlReader.Name, null, xmlReader.ReadString(), null, null, null); } else if (xmlReader.Name == "state" || xmlReader.Name == "param") { if (xmlReader.GetAttribute("name") == "anisotropy") { isAnisotropy = true; anisotropyValue = int.Parse(xmlReader.GetAttribute("value")); } else { if ((xmlReader.GetAttribute("name") == "min_filter") || (xmlReader.GetAttribute("name") == "mipmap") || (xmlReader.GetAttribute("name") == "mag_filter") || (xmlReader.GetAttribute("name") == "mipmap_bias") || (xmlReader.GetAttribute("name") == "anisotropy_power")) { isAnisotropy = false; } newMaterial.AddParam(xmlReader.Name, xmlReader.GetAttribute("name"), xmlReader.GetAttribute("value"), xmlReader.GetAttribute("type"), xmlReader.GetAttribute("vmin"), xmlReader.GetAttribute("vmax")); } } else if (xmlReader.Name == "texture" || xmlReader.Name == "texture3d" || xmlReader.Name == "cubemap") { newMaterial.AddParam(xmlReader.Name, xmlReader.GetAttribute("src"), // в качестве имени параметра xmlReader.GetAttribute("level"), // в качестве значени¤ xmlReader.GetAttribute("alphablend"), // в качестве типа значени¤ null, null); } else if (xmlReader.Name == "animation") { newMaterial.AddParam(xmlReader.Name, xmlReader.GetAttribute("level"), // в качестве имени параметра xmlReader.GetAttribute("delta"), // в качестве значени¤ xmlReader.ReadInnerXml(), // в качестве типа значени¤ null, null); } } if (isAnisotropy) { if (anisotropyValue > 0) { newMaterial.AddParam("state", "min_filter", "linear", null, null, null); newMaterial.AddParam("state", "mipmap", "2", null, null, null); newMaterial.AddParam("state", "mag_filter", "linear", null, null, null); newMaterial.AddParam("state", "mipmap_bias", "0.0", "float", "0.0", "3.0"); newMaterial.AddParam("state", "anisotropy_power", xmlReader.GetAttribute("value"), null, null, null); } else if (anisotropyValue == 0) { newMaterial.AddParam("state", "min_filter", "linear", null, null, null); newMaterial.AddParam("state", "mipmap", "2", null, null, null); newMaterial.AddParam("state", "mag_filter", "linear", null, null, null); newMaterial.AddParam("state", "mipmap_bias", "0.0", "float", "0.0", "3.0"); newMaterial.AddParam("state", "anisotropy_power", "1", null, null, null); } else if (anisotropyValue == -3) { newMaterial.AddParam("state", "min_filter", "nearest", null, null, null); newMaterial.AddParam("state", "mipmap", "1", null, null, null); newMaterial.AddParam("state", "mag_filter", "linear", null, null, null); newMaterial.AddParam("state", "mipmap_bias", "0.0", "float", "0.0", "3.0"); newMaterial.AddParam("state", "anisotropy_power", "1", null, null, null); } else if (anisotropyValue == -2) { newMaterial.AddParam("state", "min_filter", "linear", null, null, null); newMaterial.AddParam("state", "mipmap", "0", null, null, null); newMaterial.AddParam("state", "mag_filter", "linear", null, null, null); newMaterial.AddParam("state", "mipmap_bias", "0.0", "float", "0.0", "3.0"); newMaterial.AddParam("state", "anisotropy_power", "1", null, null, null); } else if (anisotropyValue == -1) { newMaterial.AddParam("state", "min_filter", "nearest", null, null, null); newMaterial.AddParam("state", "mipmap", "0", null, null, null); newMaterial.AddParam("state", "mag_filter", "nearest", null, null, null); newMaterial.AddParam("state", "mipmap_bias", "0.0", "float", "0.0", "3.0"); newMaterial.AddParam("state", "anisotropy_power", "1", null, null, null); } else { newMaterial.AddParam("state", "min_filter", "linear", null, null, null); newMaterial.AddParam("state", "mipmap", "2", null, null, null); newMaterial.AddParam("state", "mag_filter", "linear", null, null, null); newMaterial.AddParam("state", "mipmap_bias", "0.0", "float", "0.0", "3.0"); newMaterial.AddParam("state", "anisotropy_power", "1", null, null, null); } } } } catch (Exception e) { Console.WriteLine(e.Message); } return(newMaterial); }