[Bf-blender-cvs] [0dccfd732e3] temp-pbvh-seam-texturing-tweaks: Use std::array for MeshPrimitive edges
Hans Goudey
noreply at git.blender.org
Mon Dec 12 14:38:19 CET 2022
Commit: 0dccfd732e3e2f5dafcd90e5697f18a105c0bcf7
Author: Hans Goudey
Date: Tue Sep 27 22:00:34 2022 -0500
Branches: temp-pbvh-seam-texturing-tweaks
https://developer.blender.org/rB0dccfd732e3e2f5dafcd90e5697f18a105c0bcf7
Use std::array for MeshPrimitive edges
===================================================================
M source/blender/blenkernel/intern/pbvh_uv_islands.cc
M source/blender/blenkernel/intern/pbvh_uv_islands.hh
===================================================================
diff --git a/source/blender/blenkernel/intern/pbvh_uv_islands.cc b/source/blender/blenkernel/intern/pbvh_uv_islands.cc
index 484d78fe0f8..6120eb0991e 100644
--- a/source/blender/blenkernel/intern/pbvh_uv_islands.cc
+++ b/source/blender/blenkernel/intern/pbvh_uv_islands.cc
@@ -107,10 +107,7 @@ static void mesh_data_init_primitives(MeshData &mesh_data)
const MLoopTri &tri = mesh_data.looptris[i];
MeshPrimitive primitive;
primitive.poly = tri.poly;
-
- for (int j = 0; j < 3; j++) {
- primitive.loops.append(tri.tri[j]);
- }
+ std::copy(std::begin(tri.tri), std::end(tri.tri), std::begin(primitive.loops));
mesh_data.primitives.append(primitive);
}
}
@@ -122,6 +119,7 @@ static void mesh_data_init_edges(MeshData &mesh_data)
for (int64_t i = 0; i < mesh_data.looptris.size(); i++) {
const MLoopTri &tri = mesh_data.looptris[i];
MeshPrimitive &primitive = mesh_data.primitives[i];
+ Vector<int, 3> edges;
for (int j = 0; j < 3; j++) {
int v1 = mesh_data.loops[tri.tri[j]].v;
int v2 = mesh_data.loops[tri.tri[(j + 1) % 3]].v;
@@ -142,8 +140,9 @@ static void mesh_data_init_edges(MeshData &mesh_data)
mesh_data.vert_to_edge_map.add(edge_index, v1, v2);
}
- primitive.edges.append(edge_index);
+ edges.append(edge_index);
}
+ std::copy(std::begin(edges), std::end(edges), std::begin(primitive.edges));
}
/* Build edge to neighboring triangle map. */
mesh_data.edge_to_primitive_map = EdgeToPrimitiveMap(mesh_data.edges.size());
@@ -1132,7 +1131,7 @@ bool UVPrimitive::has_shared_edge(const UVPrimitive &other) const
bool UVPrimitive::has_shared_edge(const Span<float2> uv_map, const MeshPrimitive &primitive) const
{
for (const UVEdge *uv_edge : edges) {
- int loop_1 = primitive.loops.last();
+ int loop_1 = primitive.loops[2];
for (int i = 0; i < primitive.loops.size(); i++) {
int loop_2 = primitive.loops[i];
if (uv_edge->has_shared_edge(uv_map, loop_1, loop_2)) {
diff --git a/source/blender/blenkernel/intern/pbvh_uv_islands.hh b/source/blender/blenkernel/intern/pbvh_uv_islands.hh
index 2f543731a25..6060f5a5d27 100644
--- a/source/blender/blenkernel/intern/pbvh_uv_islands.hh
+++ b/source/blender/blenkernel/intern/pbvh_uv_islands.hh
@@ -97,8 +97,8 @@ class EdgeToPrimitiveMap {
/** Represents a triangle in 3d space (MLoopTri). */
struct MeshPrimitive {
int64_t poly;
- Vector<int, 3> edges;
- Vector<int, 3> loops;
+ std::array<int, 3> edges;
+ std::array<int, 3> loops;
/** Get the vertex that is not given. Both given vertices must be part of the MeshPrimitive. */
int get_other_uv_vertex(const MeshData &mesh_data, const int v1, const int v2) const;
More information about the Bf-blender-cvs
mailing list