// Methods
        public override void Load(string filePath)
        {
            base.Load(filePath);

            // Load External Texset (if any)
            if (!string.IsNullOrEmpty(TexsetName))
            {
                string dir        = Path.GetDirectoryName(filePath);
                string texsetPath = Path.Combine(dir,
                                                 $"{TexsetName}{GensTexset.Extension}");

                if (File.Exists(texsetPath))
                {
                    Texset = new GensTexset();
                    Texset.Load(texsetPath);
                }
            }
        }
        public virtual void ImportXML(Stream fs)
        {
            var xml  = XDocument.Load(fs);
            var root = xml.Root;

            string headerType = root.GetAttrValue("headerType");

            headerType = headerType.ToLower();

            if (headerType == "mirage")
            {
                Header = new MirageHeader();
            }
            else
            {
                Header = new GensHeader();
            }

            Header.RootNodeType = root.GetUIntAttr("version");
            MaterialFlag        = root.GetByteAttr("flags");
            ShaderName          = root.GetElemValue("ShaderName");
            SubShaderName       = root.GetElemValue("SubShaderName");
            NoBackFaceCulling   = root.GetBoolElem("NoBackfaceCulling");
            AdditiveBlending    = root.GetBoolElem("AdditiveBlending");

            // Parameters
            var paramsElem = root.Element("Parameters");

            parameters.Clear();

            foreach (var paramElem in paramsElem.Elements())
            {
                parameters.Add(new Parameter(paramElem));
            }

            // Texset
            var texsetElem = root.Element("Texset");

            if (texsetElem != null)
            {
                TexsetName = root.GetAttrValue("externalName");
                Texset     = new GensTexset(texsetElem);
            }
        }