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); }