My understanding is that, while subdivision algorithms like Catmull-Clark can work for any polygonal mesh (including triangles) it's preferable to start with a quad mesh.
Currently my rendering engine represents all meshes as meshes of triangles, but im now looking at adding tesselation/subdivision so I can make better use of displacement maps and what not.
So my thought process is I'll need to be able to support quads in addition to triangles. My
Mesh class represents geometry using vertex and index buffers where the index buffer is an
std::vector<std::array<unit32_t, 3>>. This works fine under my current assumption of storing ONLY triangles, but im not sure how I can change things to support both triangle and quad meshes, as well as possibly meshes that contain some quads AND some triangles.