[Bf-blender-cvs] [97c52306603] temp-T97352-3d-texturing-seam-bleeding-b2: Fix crash when texturing on really dense mesh.

Jeroen Bakker noreply at git.blender.org
Mon Sep 26 14:39:01 CEST 2022


Commit: 97c5230660328b5672338d215b1960256520829f
Author: Jeroen Bakker
Date:   Mon Sep 26 14:38:36 2022 +0200
Branches: temp-T97352-3d-texturing-seam-bleeding-b2
https://developer.blender.org/rB97c5230660328b5672338d215b1960256520829f

Fix crash when texturing on really dense mesh.

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

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

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

diff --git a/source/blender/blenkernel/intern/uv_islands.cc b/source/blender/blenkernel/intern/uv_islands.cc
index 8fea0a4aa69..8efd69e0a86 100644
--- a/source/blender/blenkernel/intern/uv_islands.cc
+++ b/source/blender/blenkernel/intern/uv_islands.cc
@@ -860,26 +860,28 @@ static void extend_at_vert(UVIsland &island, UVBorderCorner &corner, float min_u
           current_edge->get_other_uv_vertex(uv_vertex->vertex)->vertex;
       MeshPrimitive *fill_primitive = find_fill_border(
           *uv_vertex->vertex, *shared_edge_vertex, *corner.second->get_uv_vertex(1)->vertex);
-      BLI_assert(fill_primitive);
-      MeshVertex *other_prim_vertex =
-          fill_primitive->get_other_uv_vertex(uv_vertex->vertex, shared_edge_vertex)->vertex;
-
-      UVVertex uv_vertex_template;
-      uv_vertex_template.vertex = uv_vertex->vertex;
-      uv_vertex_template.uv = uv_vertex->uv;
-      UVVertex *vertex_1_ptr = island.lookup_or_create(uv_vertex_template);
-      uv_vertex_template.vertex = shared_edge_vertex;
-      uv_vertex_template.uv = old_uv;
-      UVVertex *vertex_2_ptr = island.lookup_or_create(uv_vertex_template);
-      uv_vertex_template.vertex = other_prim_vertex;
-      uv_vertex_template.uv = corner.second->get_uv_vertex(1)->uv;
-      UVVertex *vertex_3_ptr = island.lookup_or_create(uv_vertex_template);
-      add_uv_primitive_fill(island, *vertex_1_ptr, *vertex_2_ptr, *vertex_3_ptr, *fill_primitive);
-
-      UVPrimitive &new_prim = island.uv_primitives.last();
-      UVBorderEdge new_border(new_prim.get_uv_edge(shared_edge_vertex, other_prim_vertex),
-                              &new_prim);
-      new_border_edges.append(new_border);
+      if (fill_primitive) {
+        MeshVertex *other_prim_vertex =
+            fill_primitive->get_other_uv_vertex(uv_vertex->vertex, shared_edge_vertex)->vertex;
+
+        UVVertex uv_vertex_template;
+        uv_vertex_template.vertex = uv_vertex->vertex;
+        uv_vertex_template.uv = uv_vertex->uv;
+        UVVertex *vertex_1_ptr = island.lookup_or_create(uv_vertex_template);
+        uv_vertex_template.vertex = shared_edge_vertex;
+        uv_vertex_template.uv = old_uv;
+        UVVertex *vertex_2_ptr = island.lookup_or_create(uv_vertex_template);
+        uv_vertex_template.vertex = other_prim_vertex;
+        uv_vertex_template.uv = corner.second->get_uv_vertex(1)->uv;
+        UVVertex *vertex_3_ptr = island.lookup_or_create(uv_vertex_template);
+        add_uv_primitive_fill(
+            island, *vertex_1_ptr, *vertex_2_ptr, *vertex_3_ptr, *fill_primitive);
+
+        UVPrimitive &new_prim = island.uv_primitives.last();
+        UVBorderEdge new_border(new_prim.get_uv_edge(shared_edge_vertex, other_prim_vertex),
+                                &new_prim);
+        new_border_edges.append(new_border);
+      }
     }
 
     int border_insert = corner.first->index;
@@ -1052,10 +1054,10 @@ void UVBorder::remove(int64_t index)
 /** \name UVBorderCorner
  * \{ */
 
-  UVBorderCorner::UVBorderCorner(UVBorderEdge *first, UVBorderEdge *second, float angle)
-      : first(first), second(second), angle(angle)
-  {
-  }
+UVBorderCorner::UVBorderCorner(UVBorderEdge *first, UVBorderEdge *second, float angle)
+    : first(first), second(second), angle(angle)
+{
+}
 
 float2 UVBorderCorner::uv(float factor, float min_uv_distance)
 {



More information about the Bf-blender-cvs mailing list