コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: FMAT.cs プロジェクト: cano159/Switch-Toolbox
 public ResU.RenderInfoType SetTypeWiiU(RenderInfoType type)
 {
     return((ResU.RenderInfoType)System.Enum.Parse(typeof(ResU.RenderInfoType), type.ToString()));
 }