Why: We already cache VAOs per VertexLayout; make layouts canonical to avoid duplicates and mismatches.
What to change: Centralize VertexLayout—e.g., POSITION_NORMAL_TEX_TANGENT as a singleton/ID.
Reference in code: Mesh::vao_for() hashes VertexLayout and builds VAO lazily.