I'd just like to point out, there's a lot of allocations being made in the initialization process which don't need to happen. A lot of std::vector<...> variables could be std::array<...>, and most locations where anything which requires dynamic length could use some form of scratch buffer.
If this tutorial is meant to use the standard library, there's room for improvement by using std::pmr::vector<...> types instead with a monotonic buffer.
I'd just like to point out, there's a lot of allocations being made in the initialization process which don't need to happen. A lot of std::vector<...> variables could be std::array<...>, and most locations where anything which requires dynamic length could use some form of scratch buffer.
If this tutorial is meant to use the standard library, there's room for improvement by using std::pmr::vector<...> types instead with a monotonic buffer.