internal ModelDetailLevel(ModelMesh mesh, int index, AssetLoader loader, int dataOffset, ArrayBackedList <byte> bufferData) : base(mesh, index, loader) { var reader = loader.Reader; Mesh = mesh; const int indexSize = 2; Threshold = reader.ReadInt32(); Unknowns.ReadInt16s(reader, IsDS1 ? 1 : 2); if (IsDS1) { reader.RequireZeroes(2); } IndexCount = reader.ReadInt32(); IndexDataOffset = reader.ReadInt32() + dataOffset; int indexDataSize = reader.ReadInt32(); if (indexDataSize != IndexCount * indexSize) { throw new InvalidDataException("Index data size doesn't match the expected value from the index count."); } reader.RequireZeroes(4 * 3); BufferIndexOffset = bufferData.Count; long reset = reader.BaseStream.Position; reader.BaseStream.Position = IndexDataOffset; bufferData.AddRange(reader, IndexCount * indexSize); reader.BaseStream.Position = reset; }
internal ModelDetailLevel(ModelMesh mesh, int index, AssetLoader loader, int dataOffset, ArrayBackedList<byte> bufferData) : base(mesh, index, loader) { var reader = loader.Reader; Mesh = mesh; const int indexSize = 2; Threshold = reader.ReadInt32(); Unknowns.ReadInt16s(reader, IsDS1 ? 1 : 2); if (IsDS1) reader.RequireZeroes(2); IndexCount = reader.ReadInt32(); IndexDataOffset = reader.ReadInt32() + dataOffset; int indexDataSize = reader.ReadInt32(); if (indexDataSize != IndexCount * indexSize) throw new InvalidDataException("Index data size doesn't match the expected value from the index count."); reader.RequireZeroes(4 * 3); BufferIndexOffset = bufferData.Count; long reset = reader.BaseStream.Position; reader.BaseStream.Position = IndexDataOffset; bufferData.AddRange(reader, IndexCount * indexSize); reader.BaseStream.Position = reset; }
internal void ReadVertexHeaders(BinaryReader reader, int dataOffset, ArrayBackedList <byte> bufferData) { reader.RequireZeroes(4 * 1); VertexDeclarationIndex = reader.ReadInt32(); VertexSize = reader.ReadInt32(); VertexCount = reader.ReadInt32(); reader.RequireZeroes(4 * 2); int vertexDataSize = reader.ReadInt32(); if (VertexSize * VertexCount != vertexDataSize) { throw new Exception(); } VertexDataOffset = reader.ReadInt32() + dataOffset; // Read vertex data. long reset = reader.BaseStream.Position; reader.BaseStream.Position = VertexDataOffset; BufferDataOffset = bufferData.Count; bufferData.AddRange(reader, vertexDataSize); reader.BaseStream.Position = reset; }
internal void ReadVertexHeaders(BinaryReader reader, int dataOffset, ArrayBackedList<byte> bufferData) { reader.RequireZeroes(4 * 1); VertexDeclarationIndex = reader.ReadInt32(); VertexSize = reader.ReadInt32(); VertexCount = reader.ReadInt32(); reader.RequireZeroes(4 * 2); int vertexDataSize = reader.ReadInt32(); if (VertexSize * VertexCount != vertexDataSize) throw new Exception(); VertexDataOffset = reader.ReadInt32() + dataOffset; // Read vertex data. long reset = reader.BaseStream.Position; reader.BaseStream.Position = VertexDataOffset; BufferDataOffset = bufferData.Count; bufferData.AddRange(reader, vertexDataSize); reader.BaseStream.Position = reset; }