[Bf-blender-cvs] [6a6e7cb5063] temp-T97352-3d-texturing-seam-bleeding-b2: Fix writing to temp variable.

Jeroen Bakker noreply at git.blender.org
Tue Jun 7 14:45:24 CEST 2022


Commit: 6a6e7cb5063d61de523728add997b4dcc5dbf2d2
Author: Jeroen Bakker
Date:   Tue Jun 7 14:45:20 2022 +0200
Branches: temp-T97352-3d-texturing-seam-bleeding-b2
https://developer.blender.org/rB6a6e7cb5063d61de523728add997b4dcc5dbf2d2

Fix writing to temp variable.

===================================================================

M	source/blender/blenkernel/BKE_uv_islands.hh
M	source/blender/blenkernel/intern/uv_islands.cc

===================================================================

diff --git a/source/blender/blenkernel/BKE_uv_islands.hh b/source/blender/blenkernel/BKE_uv_islands.hh
index 77c430dea7c..a463d126a4b 100644
--- a/source/blender/blenkernel/BKE_uv_islands.hh
+++ b/source/blender/blenkernel/BKE_uv_islands.hh
@@ -334,7 +334,7 @@ struct UVBorderEdge {
   }
 };
 
-using UVBorderCorner = std::pair<UVBorderEdge &, UVBorderEdge &>;
+using UVBorderCorner = std::pair<UVBorderEdge *, UVBorderEdge *>;
 
 struct UVBorder {
   /** Ordered list of UV Verts of the border of this island. */
diff --git a/source/blender/blenkernel/intern/uv_islands.cc b/source/blender/blenkernel/intern/uv_islands.cc
index e69f19b7ee8..8c1c5298d11 100644
--- a/source/blender/blenkernel/intern/uv_islands.cc
+++ b/source/blender/blenkernel/intern/uv_islands.cc
@@ -44,7 +44,7 @@ static std::optional<UVBorderCorner> sharpest_border_corner(UVBorder &border, fl
     float new_radius = border.outside_angle(edge);
     if (new_radius < *r_angle) {
       *r_angle = new_radius;
-      result = UVBorderCorner(border.edges[edge.prev_index], edge);
+      result = UVBorderCorner(&border.edges[edge.prev_index], &edge);
     }
   }
   return result;
@@ -183,8 +183,8 @@ static void print(const Fan &fan)
 
 static void extend_at_vert(UVIsland &island, UVBorderCorner &corner, const MeshData &mesh_data)
 {
-  BLI_assert(corner.first.get_uv_vertex(1) == corner.second.get_uv_vertex(0));
-  UVVertex *uv_vertex = corner.second.get_uv_vertex(0);
+  BLI_assert(corner.first->get_uv_vertex(1) == corner.second->get_uv_vertex(0));
+  UVVertex *uv_vertex = corner.second->get_uv_vertex(0);
   Fan fan(*(uv_vertex->vertex));
   print(fan);
   fan.init_uv_coordinates(*uv_vertex, island);
@@ -216,7 +216,7 @@ static void extend_at_vert(UVIsland &island, UVBorderCorner &corner, const MeshD
   printf("Found %d new edges to add\n", num_to_add);
 
   if (num_to_add == 0) {
-    float2 center_uv = (corner.first.get_uv_vertex(0)->uv + corner.second.get_uv_vertex(1)->uv) /
+    float2 center_uv = (corner.first->get_uv_vertex(0)->uv + corner.second->get_uv_vertex(1)->uv) /
                        2.0f;
     // no new triangles found. In this case we should extend the existing borders.
     UVVertex center_vertex;
@@ -224,46 +224,46 @@ static void extend_at_vert(UVIsland &island, UVBorderCorner &corner, const MeshD
     center_vertex.uv = center_uv;
     center_vertex.uv_edges.clear();
     {
-      MeshPrimitive *mesh_primitive = corner.second.uv_primitive->primitive;
+      MeshPrimitive *mesh_primitive = corner.second->uv_primitive->primitive;
       UVPrimitive prim1(mesh_primitive);
       MeshUVVert *other_uv_vert = mesh_primitive->get_other_uv_vertex(
-          corner.second.edge->vertices[0]->vertex, corner.second.edge->vertices[1]->vertex);
+          corner.second->edge->vertices[0]->vertex, corner.second->edge->vertices[1]->vertex);
       center_vertex.loop = other_uv_vert->loop;
       center_vertex.vertex = other_uv_vert->vertex;
 
       UVVertex *center_vertex_ptr = island.lookup_or_create(center_vertex);
       UVEdge edge_template;
-      edge_template.vertices[0] = corner.first.get_uv_vertex(1);
-      edge_template.vertices[1] = corner.first.get_uv_vertex(0);
+      edge_template.vertices[0] = corner.first->get_uv_vertex(1);
+      edge_template.vertices[1] = corner.first->get_uv_vertex(0);
       prim1.edges.append(island.lookup_or_create(edge_template));
-      edge_template.vertices[0] = corner.first.get_uv_vertex(0);
+      edge_template.vertices[0] = corner.first->get_uv_vertex(0);
       edge_template.vertices[1] = center_vertex_ptr;
       prim1.edges.append(island.lookup_or_create(edge_template));
       edge_template.vertices[0] = center_vertex_ptr;
-      edge_template.vertices[1] = corner.first.get_uv_vertex(1);
+      edge_template.vertices[1] = corner.first->get_uv_vertex(1);
       prim1.edges.append(island.lookup_or_create(edge_template));
       prim1.append_to_uv_edges();
       prim1.append_to_uv_vertices();
       island.uv_primitives.append(prim1);
     }
     {
-      MeshPrimitive *mesh_primitive = corner.first.uv_primitive->primitive;
+      MeshPrimitive *mesh_primitive = corner.first->uv_primitive->primitive;
       UVPrimitive prim1(mesh_primitive);
       MeshUVVert *other_uv_vert = mesh_primitive->get_other_uv_vertex(
-          corner.first.edge->vertices[0]->vertex, corner.first.edge->vertices[1]->vertex);
+          corner.first->edge->vertices[0]->vertex, corner.first->edge->vertices[1]->vertex);
       center_vertex.loop = other_uv_vert->loop;
       center_vertex.vertex = other_uv_vert->vertex;
       /* TODO: Should be reversed. */
       UVVertex *center_vertex_ptr = island.lookup_or_create(center_vertex);
       UVEdge edge_template;
-      edge_template.vertices[0] = corner.second.get_uv_vertex(1);
-      edge_template.vertices[1] = corner.second.get_uv_vertex(0);
+      edge_template.vertices[0] = corner.second->get_uv_vertex(1);
+      edge_template.vertices[1] = corner.second->get_uv_vertex(0);
       prim1.edges.append(island.lookup_or_create(edge_template));
-      edge_template.vertices[0] = corner.second.get_uv_vertex(0);
+      edge_template.vertices[0] = corner.second->get_uv_vertex(0);
       edge_template.vertices[1] = center_vertex_ptr;
       prim1.edges.append(island.lookup_or_create(edge_template));
       edge_template.vertices[0] = center_vertex_ptr;
-      edge_template.vertices[1] = corner.second.get_uv_vertex(1);
+      edge_template.vertices[1] = corner.second->get_uv_vertex(1);
       prim1.edges.append(island.lookup_or_create(edge_template));
       prim1.append_to_uv_edges();
       prim1.append_to_uv_vertices();
@@ -405,7 +405,7 @@ void UVIsland::extend_border(const UVIslandsMask &mask,
     border.update_indexes(border_index++);
   }
 
-  int i = 5;
+  int i = 4;
   while (i) {
     std::optional<UVBorderCorner> extension_corner = sharpest_border_corner(*this);
     if (!extension_corner.has_value()) {
@@ -413,8 +413,8 @@ void UVIsland::extend_border(const UVIslandsMask &mask,
     }
 
     /* When outside the mask, the uv should not be considered for extension. */
-    if (!mask.is_masked(island_index, extension_corner->second.get_uv_vertex(0)->uv)) {
-      extension_corner->second.flags.extendable = false;
+    if (!mask.is_masked(island_index, extension_corner->second->get_uv_vertex(0)->uv)) {
+      extension_corner->second->flags.extendable = false;
       continue;
     }
 
@@ -422,7 +422,7 @@ void UVIsland::extend_border(const UVIslandsMask &mask,
     extend_at_vert(*this, *extension_corner, mesh_data);
 
     /* Mark that the vert is extended. Unable to extend twice. */
-    extension_corner->second.flags.extendable = false;
+    extension_corner->second->flags.extendable = false;
     i--;
 #ifdef DEBUG_SVG
     svg(of, *this, step++);



More information about the Bf-blender-cvs mailing list