use VAO's to manage the state (only need to bind everything once)