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