Add the ability to retrieve implicit sharing info directly from the
C++ attribute API, which simplifies memory usage and performance
optimizations making use of it. This commit uses the additions to
the API to avoid copies in a few places:
- The "rest_position" attribute in the mesh modifier stack
- Instance on Points node
- Instances to points node
- Mesh to points node
- Points to vertices node
Many files are affected because in order to include the new information
in the API's returned data, I had to switch a bunch of types from
`VArray` to `AttributeReader`. This generally makes sense anyway, since
it allows retrieving the domain, which wasn't possible before in some
cases. I overloaded the `*` deference operator for some syntactic sugar
to avoid the (very ugly) `.varray` that would be necessary otherwise.
TODO:
- [ ] Fix tests
- [ ] cycles_pointcloud_cpu (Failed)
- [ ] geo_node_attributes_test_attribute_curve_map (Failed)
- [ ] geo_node_attributes_test_attribute_map_range (Failed)
- [ ] geo_node_attributes_test_attribute_proximity (Failed)
- [ ] geo_node_curves_test_handle_type_selection (Failed)
- [ ] geo_node_curves_test_spline_parameter (Failed)
- [ ] geo_node_geometry_test_delete_geometry (SEGFAULT)
- [ ] geo_node_geometry_test_realize_instances_materials (Subprocess aborted)
- [ ] geo_node_instance_test_instance_on_points (Subprocess aborted)
- [ ] geo_node_instance_test_instance_to_points (Subprocess aborted)
- [ ] geo_node_instance_test_instance_transforms (Subprocess aborted)
- [ ] geo_node_mesh_test_set_position_normals_update (Subprocess aborted)
- [ ] geo_node_points_test_point_instance (Subprocess aborted)
- [ ] geo_node_utilities_test_accumulate_field_column_grid (Subprocess aborted)
- [ ] geo_node_vector_test_vector_map_range (Subprocess aborted)