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
35 lines
889 B
C++
35 lines
889 B
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#pragma once
|
|
|
|
#include "BLI_index_mask.hh"
|
|
|
|
#include "BKE_curves.hh"
|
|
|
|
struct Mesh;
|
|
|
|
/** \file
|
|
* \ingroup geo
|
|
*/
|
|
|
|
namespace blender::geometry {
|
|
|
|
/**
|
|
* Convert the mesh into one or many poly curves. Since curves cannot have branches,
|
|
* intersections of more than three edges will become breaks in curves. Attributes that
|
|
* are not built-in on meshes and not curves are transferred to the result curve.
|
|
*/
|
|
bke::CurvesGeometry mesh_to_curve_convert(
|
|
const Mesh &mesh,
|
|
const IndexMask selection,
|
|
const bke::AnonymousAttributePropagationInfo &propagation_info);
|
|
|
|
bke::CurvesGeometry create_curve_from_vert_indices(
|
|
const Mesh &mesh,
|
|
Span<int> vert_indices,
|
|
Span<int> curve_offsets,
|
|
IndexRange cyclic_curves,
|
|
const bke::AnonymousAttributePropagationInfo &propagation_info);
|
|
|
|
} // namespace blender::geometry
|