コード例 #1
0
        protected override bool DeserializeItems(XmlReader reader)
        {
            var result = base.DeserializeItems(reader);

            if (!result)
            {
                var serializer = textureCollectionSerializer.Value;
                if (serializer.CanDeserialize(reader))
                {
                    var items = (List <TextureConfiguration>)serializer.Deserialize(reader);
                    foreach (var item in items)
                    {
                        var shader = new MaterialConfiguration();
                        shader.Name = item.Name;
                        shader.BufferBindings.Add(new TextureBindingConfiguration
                        {
                            Name        = "tex",
                            TextureName = item.Name
                        });
                        AddItem(shader);
                    }

                    return(true);
                }
            }

            return(result);
        }
コード例 #2
0
        protected override object CreateResourceConfiguration(string fileName)
        {
            var material = new MaterialConfiguration();

            material.Name = Path.GetFileNameWithoutExtension(fileName);
            MtlReader.ReadMaterial(material, fileName);
            return(material);
        }
コード例 #3
0
 internal Material(Application app)
 {
     _res    = app.Resources;
     _config = new MaterialConfiguration
     {
         ColorConfiguration = new MaterialColorConfiguration(),
         FontConfiguration  = new MaterialFontConfiguration()
     };
 }
コード例 #4
0
ファイル: MtlReader.cs プロジェクト: aalmada/bonsai
        internal static void ReadMaterial(MaterialConfiguration material, string fileName)
        {
            foreach (var line in File.ReadAllLines(fileName))
            {
                var values = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                if (values.Length < 2)
                {
                    continue;
                }

                var uniformName = values[0];
                if (uniformName == "newmtl" || uniformName.StartsWith("#"))
                {
                    continue;
                }
                if (uniformName.StartsWith("map_"))
                {
                    var textureBinding = new TextureBindingConfiguration();
                    textureBinding.Name        = uniformName;
                    textureBinding.TextureName = Path.GetFileNameWithoutExtension(values[1]);
                    textureBinding.TextureSlot = TextureUnit.Texture0 + material.BufferBindings.Count;
                    material.BufferBindings.Add(textureBinding);
                }
                else
                {
                    UniformConfiguration uniform;
                    var uniformValues = ParseValues(values);
                    switch (uniformValues.Length)
                    {
                    case 1: uniform = new FloatUniform {
                            Value = uniformValues[0]
                    }; break;

                    case 2: uniform = new Vec2Uniform {
                            Value = new Vector2(uniformValues[0], uniformValues[1])
                    }; break;

                    case 3: uniform = new Vec3Uniform {
                            Value = new Vector3(uniformValues[0], uniformValues[1], uniformValues[2])
                    }; break;

                    case 4: uniform = new Vec4Uniform {
                            Value = new Vector4(uniformValues[0], uniformValues[1], uniformValues[2], uniformValues[3])
                    }; break;

                    default: throw new InvalidOperationException("Unsupported number of values in the configuration of uniform " + uniformName + ".");
                    }
                    uniform.Name = uniformName;
                    material.ShaderUniforms.Add(uniform);
                }
            }
        }
コード例 #5
0
    public static ContentConfiguration <T> GetFromRootElement(XElement elemRoot, XName name)
    {
        ContentConfiguration <T> output;

        if (elemRoot.Element(name).Elements().Count() == 0)
        {
            output          = new MaterialConfiguration <T>();
            output.nodeName = name.LocalName;
            return(output);
        }
        switch (elemRoot.Element(name).Elements().First().Name.LocalName)
        {
        case "material":
            output = new MaterialConfiguration <T>();
            break;

        case "tiletype":
            output = new TileConfiguration <T>();
            break;

        case "random":
            output = new RandomConfiguration <T>();
            break;

        case "ramp":
            output = new RampConfiguration <T>();
            break;

        case "item":
            output = new ItemConfiguration <T>();
            break;

        default:
            Debug.LogError("Found unknown matching method \"" + elemRoot.Element(name).Elements().First().Name.LocalName + "\", assuming material.");
            output = new MaterialConfiguration <T>();
            break;
        }
        output.nodeName = name.LocalName;
        return(output);
    }
コード例 #6
0
 internal Material(Application app, string key) : this(app)
 {
     _config = GetResource <MaterialConfiguration>(key);
 }
コード例 #7
0
 internal Material(Application app, MaterialConfiguration materialResource) : this(app)
 {
     _config = materialResource;
 }
コード例 #8
0
        /// <summary>
        /// Configure's the current app's resources by merging pre-defined Material resources and creating new resources based on the <see cref="MaterialConfiguration"/>'s properties.
        /// </summary>
        /// <param name="app">The cross-platform mobile application that is running.</param>
        /// <param name="materialResource">The object containing the <see cref="MaterialColorConfiguration"/> and <see cref="MaterialFontConfiguration"/>.</param>
        /// <exception cref="ArgumentNullException" />
        public static void Init(Application app, MaterialConfiguration materialResource)
        {
            var material = new Material(app ?? throw new ArgumentNullException(nameof(app)), materialResource ?? throw new ArgumentNullException(nameof(materialResource)));

            material.MergeMaterialDictionaries();
        }
コード例 #9
0
 internal Material(Application app, MaterialConfiguration materialResource) : this(app)
 {
     ColorConfiguration = materialResource.ColorConfiguration;
     FontConfiguration  = materialResource.FontConfiguration;
 }
コード例 #10
0
 internal Material(Application app, MaterialConfiguration config = null)
 {
     _res     = app.Resources;
     Instance = this;
     MergeMaterialDictionaries(config, config == null);
 }