After some discussions and investigation over the last couple months,
it's not clear what the "wrapper type finalize" logic is necessary for.
For edit meshes and regular meshes, normals are calculated lazily when
building the draw cache.
Apart from the unnecessary complication for mesh GPU draw data
extraction, this code also causes normals to always be calculated
when turning an edit mesh wrapper into a regular mesh. However, those
normals are immediately discared since the edit deform cache is deleted
in the next line.
Beyond the obvious simplification, the motivation for this change is to
avoid requesting write access on the evaluated mesh and cage mesh. This
works better with implicit sharing, allowing other improvements.
Fixes#119938
Make use of GeometrySet and implicit sharing to significantly
simplify the handling of mesh evaluation in the modifier stack.
TODO: Proper description, testing
One thing to check is whether it's actually okay to store mesh_input
as a read-only mesh in the evaluated geometry set. I would hope so,
but we may be required to store it separately and add some complexity
back, I'm not sure.