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); }
protected override object CreateResourceConfiguration(string fileName) { var material = new MaterialConfiguration(); material.Name = Path.GetFileNameWithoutExtension(fileName); MtlReader.ReadMaterial(material, fileName); return(material); }
internal Material(Application app) { _res = app.Resources; _config = new MaterialConfiguration { ColorConfiguration = new MaterialColorConfiguration(), FontConfiguration = new MaterialFontConfiguration() }; }
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); } } }
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); }
internal Material(Application app, string key) : this(app) { _config = GetResource <MaterialConfiguration>(key); }
internal Material(Application app, MaterialConfiguration materialResource) : this(app) { _config = materialResource; }
/// <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(); }
internal Material(Application app, MaterialConfiguration materialResource) : this(app) { ColorConfiguration = materialResource.ColorConfiguration; FontConfiguration = materialResource.FontConfiguration; }
internal Material(Application app, MaterialConfiguration config = null) { _res = app.Resources; Instance = this; MergeMaterialDictionaries(config, config == null); }