This refactor also helps with T84297.
Goals of this refactor:
- Clarify the distinction between builtin and other attributes at the code level.
- Reduce number of places that need to be modified to add more builtin attributes.
- Reduce number of virtual methods that need to be implemented by e.g. MeshComponent.
To reach these goals, this patch implements the concept of "attribute providers".
An attribute provider knows how to give access to attributes on a geometry component.
Each geometry component can have multiple attribute providers, whereby each provider manages an independent set of attributes.
The separation of builtin and other attributes is now done at the attribute provider level (there are two types of providers).
The most important functions, where everything comes together are create_attribute_providers_for_mesh and create_attribute_providers_for_point_cloud.
Those functions list the providers used by the different geometry types.