28 if (uv_a[0] == uv_b[0] && uv_a[1] == uv_b[1]) {
45 const float diff_abs = 1e-12f;
46 const int diff_ulp = 12;
58 if (loops_for_vert.
size() <= 1) {
64 for (
float2 *uv_map : uv_map_layers) {
67 while (loops_merge.
size() > 1) {
69 const float *uv_src = uv_map[loops_merge[0]];
70 for (
uint i = 1;
i <= i_last;) {
71 float *uv_dst = uv_map[loops_merge[
i]];
74 uv_dst[0] = uv_src[0];
75 uv_dst[1] = uv_src[1];
79 loops_merge[
i] = loops_merge[i_last--];
93 loops_merge[0] = loops_merge[i_last];
94 loops_merge.resize(i_last);
103 if (
mesh->corners_num == 0) {
126 uv_map_layers.
append(attr.span.data());
130 for (const int64_t v_index : range) {
131 merge_uvs_for_vertex(vert_to_corner[v_index], uv_map_layers);
#define BLI_assert_unreachable()
MINLINE int compare_ff_relative(float a, float b, float max_diff, int max_ulps)
constexpr int64_t size() const
void append(const T &value)
void extend_unchecked(Span< T > array)
void reserve(const int64_t min_capacity)
void foreach_attribute(const FunctionRef< void(const AttributeIter &)> fn) const
GSpanAttributeWriter lookup_for_write_span(StringRef attribute_id)
static int compare_v2_classify(const float uv_a[2], const float uv_b[2])
static void merge_uvs_for_vertex(const Span< int > loops_for_vert, Span< float2 * > uv_map_layers)
void BKE_mesh_merge_customdata_for_apply_modifier(Mesh *mesh)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))