public static Vertex Read(byte[] buffer, VertexFormat format, int[] offsets)
        {
            Vertex vertex = new Vertex();

            foreach (var element in format.Elements) {
                int elementOffset = offsets[element.SourcePart];

                ReadElement(buffer, element, elementOffset, ref vertex);
            }

            return vertex;
        }
        static void ReadElement(byte[] buffer, VertexFormatElement element, int offset, ref Vertex vertex)
        {
            var data = ReadData(buffer, element.DataType, offset + element.Offset);

            switch (element.Attribute) {
                case VertexAttribute.BlendIndices:
                    vertex.BlendIndices = (uint)data;
                    break;
                case VertexAttribute.BlendWeights:
                    vertex.BlendWeights = (Vector4)data;
                    break;
                case VertexAttribute.Color:
                    vertex.Color = (Vector4)data;
                    break;
                case VertexAttribute.Normal:
                    vertex.Normal = ForceToVector3(data);
                    break;
                case VertexAttribute.Position:
                    vertex.Position = ForceToVector4(data);
                    break;
                case VertexAttribute.Tangent2:
                    vertex.Tangent2 = (Vector4)data;
                    break;
                case VertexAttribute.Tangent1:
                    vertex.Tangent1 = (Vector4)data;
                    break;
                case VertexAttribute.UV:
                    vertex.UV = ForceToVector4(data);
                    break;
                default:
                    throw new NotSupportedException();
            }
        }