public MTOB(EndianBinaryReader er) { Type = er.ReadUInt32(); Signature = er.ReadString(Encoding.ASCII, 4); if (Signature != "MTOB") throw new SignatureNotCorrectException(Signature, "MTOB", er.BaseStream.Position); Revision = er.ReadUInt32(); NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); Unknown2 = er.ReadUInt32(); Unknown3 = er.ReadUInt32(); Flags = (MaterialFlags)er.ReadUInt32(); TexCoordConfig = er.ReadUInt32(); TranslucencyKind = er.ReadUInt32(); MaterialColor = new MaterialColorCtr(er); Rasterization = new RasterizationCtr(er); FragmentOperation = new FragmentOperationCtr(er); NrActiveTextureCoordiators = er.ReadUInt32(); TextureCoordiators = new TextureCoordinatorCtr[3]; TextureCoordiators[0] = new TextureCoordinatorCtr(er); TextureCoordiators[1] = new TextureCoordinatorCtr(er); TextureCoordiators[2] = new TextureCoordinatorCtr(er); TexMapper0Offset = er.ReadUInt32(); if (TexMapper0Offset != 0) TexMapper0Offset += (UInt32)er.BaseStream.Position - 4; TexMapper1Offset = er.ReadUInt32(); if (TexMapper1Offset != 0) TexMapper1Offset += (UInt32)er.BaseStream.Position - 4; TexMapper2Offset = er.ReadUInt32(); if (TexMapper2Offset != 0) TexMapper2Offset += (UInt32)er.BaseStream.Position - 4; ProcTexMapperOffset = er.ReadUInt32(); if (ProcTexMapperOffset != 0) ProcTexMapperOffset += (UInt32)er.BaseStream.Position - 4; ShaderOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); FragmentShaderOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); ShaderProgramDescriptionIndex = er.ReadUInt32(); NrShaderParameters = er.ReadUInt32(); ShaderParametersOffsetArrayOffset = er.ReadUInt32(); LightSetIndex = er.ReadUInt32(); FogIndex = er.ReadUInt32(); ShadingParameterHash = er.ReadUInt32(); ShaderParametersHash = er.ReadUInt32(); TextureCoordinatorsHash = er.ReadUInt32(); TextureSamplersHash = er.ReadUInt32(); TextureMappersHash = er.ReadUInt32(); MaterialColorHash = er.ReadUInt32(); RasterizationHash = er.ReadUInt32(); FragmentLightingHash = er.ReadUInt32(); FragmentLightingTableHash = er.ReadUInt32(); FragmentLightingTableParametersHash = er.ReadUInt32(); TextureCombinersHash = er.ReadUInt32(); AlphaTestHash = er.ReadUInt32(); FragmentOperationHash = er.ReadUInt32(); MaterialId = er.ReadUInt32(); long curpos = er.BaseStream.Position; er.BaseStream.Position = NameOffset; Name = er.ReadStringNT(Encoding.ASCII); if (TexMapper0Offset != 0) { er.BaseStream.Position = TexMapper0Offset; Tex0 = new TexInfo(er); } if (TexMapper1Offset != 0) { er.BaseStream.Position = TexMapper1Offset; Tex1 = new TexInfo(er); } if (TexMapper2Offset != 0) { er.BaseStream.Position = TexMapper2Offset; Tex2 = new TexInfo(er); } /*if (TexMapper3Offset != 0) { er.BaseStream.Position = Tex3Offset; Tex3 = new TexInfo(er); }*/ //TODO: Procedural Texture Mapper er.BaseStream.Position = ShaderOffset; Shader = new SHDR(er); er.BaseStream.Position = FragmentShaderOffset; FragShader = new FragmentShader(er); er.BaseStream.Position = curpos; }
public MTOB(String Name) { Type = 0x8000000; Signature = "MTOB"; Revision = 0x6000003; this.Name = Name; MaterialColor = new MaterialColorCtr(); Rasterization = new RasterizationCtr(); FragmentOperation = new FragmentOperationCtr(); NrActiveTextureCoordiators = 0; TextureCoordiators = new TextureCoordinatorCtr[3]; TextureCoordiators[0] = new TextureCoordinatorCtr(); TextureCoordiators[1] = new TextureCoordinatorCtr(); TextureCoordiators[2] = new TextureCoordinatorCtr(); Shader = new SHDR(); FragShader = new FragmentShader(); }