Exemple #1
0
        public static void Load(ResFileSwitchLoader loader, Material mat)
        {
            if (loader.ResFile.VersionMajor2 == 9)
            {
                mat.Flags = loader.ReadEnum <MaterialFlags>(true);
            }
            else
            {
                loader.LoadHeaderBlock();
            }

            mat.Name         = loader.LoadString();
            mat.RenderInfos  = loader.LoadDictValues <RenderInfo>();
            mat.ShaderAssign = loader.Load <ShaderAssign>();
            long TextureArrayOffset = loader.ReadInt64();
            long TextureNameArray   = loader.ReadInt64();
            long SamplerArrayOffset = loader.ReadInt64();

            mat.Samplers     = loader.LoadDictValues <Sampler>();
            mat.ShaderParams = loader.LoadDictValues <ShaderParam>();
            long SourceParamOffset = loader.ReadInt64();

            mat.UserData = loader.LoadDictValues <UserData>();
            long VolatileFlagsOffset    = loader.ReadInt64();
            long userPointer            = loader.ReadInt64();
            long SamplerSlotArrayOffset = loader.ReadInt64();
            long TexSlotArrayOffset     = loader.ReadInt64();

            if (loader.ResFile.VersionMajor2 != 9)
            {
                mat.Flags = loader.ReadEnum <MaterialFlags>(true);
            }
            ushort idx                    = loader.ReadUInt16();
            ushort numRenderInfo          = loader.ReadUInt16();
            byte   numTextureRef          = loader.ReadByte();
            byte   numSampler             = loader.ReadByte();
            ushort numShaderParam         = loader.ReadUInt16();
            ushort numShaderParamVolatile = loader.ReadUInt16();
            ushort sizParamSource         = loader.ReadUInt16();
            ushort sizParamRaw            = loader.ReadUInt16();
            ushort numUserData            = loader.ReadUInt16();

            if (loader.ResFile.VersionMajor2 != 9)
            {
                loader.ReadUInt32(); //Padding
            }
            var textures = loader.LoadCustom(() => loader.LoadStrings(numTextureRef), (uint)TextureNameArray);

            mat.TextureRefs = new List <TextureRef>();
            if (textures != null)
            {
                foreach (var tex in textures)
                {
                    mat.TextureRefs.Add(new TextureRef()
                    {
                        Name = tex
                    });
                }
            }

            //Add names to the value as switch does not store any
            foreach (var sampler in mat.Samplers)
            {
                sampler.Value.Name = sampler.Key;
            }

            mat.ShaderParamData = loader.LoadCustom(() => loader.ReadBytes(sizParamSource), (uint)SourceParamOffset);

            mat.VolatileFlags    = loader.LoadCustom(() => loader.ReadBytes((int)Math.Ceiling(numShaderParam / 8f)), (uint)VolatileFlagsOffset);
            mat.TextureSlotArray = loader.LoadCustom(() => loader.ReadInt64s(numTextureRef), (uint)SamplerSlotArrayOffset);
            mat.SamplerSlotArray = loader.LoadCustom(() => loader.ReadInt64s(numSampler), (uint)TexSlotArrayOffset);
        }