public static List <MeshMetaInfo> FromJson(Material mat, string json) { JsonConvert.DefaultSettings = () => { var settings = new JsonSerializerSettings(); return(settings); }; var matJson = JsonConvert.DeserializeObject <MaterialStruct>(json); mat.Name = matJson.Name; mat.Visible = matJson.Visible; mat.ShaderAssign = ConvertShaderAssign(matJson.ShaderAssign); mat.TextureRefs = new List <TextureRef>(); mat.Samplers = new ResDict <Sampler>(); mat.ShaderParams = new ResDict <ShaderParam>(); mat.UserData = new ResDict <UserData>(); mat.RenderInfos = new ResDict <RenderInfo>(); mat.ShaderParamData = new byte[0]; mat.VolatileFlags = new byte[0]; if (matJson.RenderState != null) { mat.RenderState = matJson.RenderState; } foreach (var tex in matJson.Textures) { mat.TextureRefs.Add(new TextureRef() { Name = tex }); } foreach (var sampler in matJson.Samplers) { mat.Samplers.Add(sampler.Name, sampler); } mat.TextureSlotArray = new long[matJson.Textures.Count]; mat.SamplerSlotArray = new long[matJson.Textures.Count]; mat.VolatileFlags = matJson.VolatileFlags; foreach (var param in matJson.Parameters) { string type = param.Key.Split('|')[0]; string name = param.Key.Split('|')[1]; ShaderParam shaderParam = new ShaderParam(); shaderParam.Name = name; var dataType = (ShaderParamType)Enum.Parse(typeof(ShaderParamType), type); object value = null; switch (dataType) { case ShaderParamType.Float: value = Convert.ToSingle(param.Value); break; case ShaderParamType.UInt: value = Convert.ToUInt32(param.Value); break; case ShaderParamType.Int: value = Convert.ToInt32(param.Value); break; case ShaderParamType.Bool: value = Convert.ToBoolean(param.Value); break; case ShaderParamType.Srt2D: value = ((JObject)param.Value).ToObject <Srt2D>(); break; case ShaderParamType.Srt3D: value = ((JObject)param.Value).ToObject <Srt3D>(); break; case ShaderParamType.TexSrt: value = ((JObject)param.Value).ToObject <TexSrt>(); break; case ShaderParamType.TexSrtEx: value = ((JObject)param.Value).ToObject <TexSrt>(); break; case ShaderParamType.Float2: case ShaderParamType.Float2x2: case ShaderParamType.Float2x3: case ShaderParamType.Float2x4: case ShaderParamType.Float3: case ShaderParamType.Float3x2: case ShaderParamType.Float3x3: case ShaderParamType.Float3x4: case ShaderParamType.Float4: case ShaderParamType.Float4x2: case ShaderParamType.Float4x3: case ShaderParamType.Float4x4: value = ((JArray)param.Value).ToObject <float[]>(); break; case ShaderParamType.Bool2: case ShaderParamType.Bool3: case ShaderParamType.Bool4: value = ((JArray)param.Value).ToObject <bool>(); break; case ShaderParamType.Int2: case ShaderParamType.Int3: case ShaderParamType.Int4: value = ((JArray)param.Value).ToObject <int[]>(); break; case ShaderParamType.UInt2: case ShaderParamType.UInt3: case ShaderParamType.UInt4: value = ((JArray)param.Value).ToObject <uint[]>(); break; default: throw new Exception($"Unsupported parameter type! {type}"); } mat.SetShaderParameter(name, dataType, value); } foreach (var param in matJson.RenderInfo) { string type = param.Key.Split('|')[0]; string name = param.Key.Split('|')[1]; RenderInfoType dataType = (RenderInfoType)Enum.Parse(typeof(RenderInfoType), type); if (dataType == RenderInfoType.Single) { mat.SetRenderInfo(name, ((JArray)param.Value).ToObject <float[]>()); } if (dataType == RenderInfoType.Int32) { mat.SetRenderInfo(name, ((JArray)param.Value).ToObject <int[]>()); } if (dataType == RenderInfoType.String) { mat.SetRenderInfo(name, ((JArray)param.Value).ToObject <string[]>()); } } mat.UserData = UserDataConvert.Convert(matJson.UserData); return(matJson.MeshInfo); }
public ResU.RenderInfoType SetTypeWiiU(RenderInfoType type) { return((ResU.RenderInfoType)System.Enum.Parse(typeof(ResU.RenderInfoType), type.ToString())); }