Previously, the lifetimes of anonymous attributes were determined by reference counts which were non-deterministic when multiple threads are used. Now the lifetimes of anonymous attributes are handled more explicitly and deterministically. This is a prerequisite for any kind of caching, because caching the output of nodes that do things non-deterministically and have "invisible inputs" (reference counts) doesn't really work. For more details for how deterministic lifetimes are achieved, see D16858. No functional changes are expected. Small performance changes are expected as well (within few percent, anything larger regressions should be reported as bugs). Differential Revision: https://developer.blender.org/D16858
29 lines
666 B
C++
29 lines
666 B
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#include "BLI_index_mask.hh"
|
|
|
|
#include "BKE_attribute.hh"
|
|
|
|
#pragma once
|
|
|
|
struct PointCloud;
|
|
class PointCloudComponent;
|
|
|
|
/** \file
|
|
* \ingroup geo
|
|
*/
|
|
|
|
namespace blender::geometry {
|
|
|
|
/**
|
|
* Merge selected points into other selected points within the \a merge_distance. The merged
|
|
* indices favor speed over accuracy, since the results will depend on the order of the points.
|
|
*/
|
|
PointCloud *point_merge_by_distance(
|
|
const PointCloud &src_points,
|
|
const float merge_distance,
|
|
const IndexMask selection,
|
|
const bke::AnonymousAttributePropagationInfo &propagation_info);
|
|
|
|
} // namespace blender::geometry
|