示例#1
0
        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;
        }
示例#3
0
        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;
        }
示例#4
0
        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;
        }