The current way VertexLayouts are handled, it's now longer possible to use a (VVVVNNNNCCCC) vertex buffer layout (i.e., multiple non-interleaved attributes in single vbo). This used to work because the older glVertexAttribPointer function would accept the large byte offset of such layouts, but the currently used glVertexArrayAttribFormat function uses a smaller relative offset.
Maybe rename the offset in VertexLayout to relative_offset? And introduce a new optional offset that defaults to 0?