[Bf-blender-cvs] [ea486bcd3d3] temp-T96710-pbvh-pixels: Remove indices from Triangles. Index of the triangle is in sync with prim list.

Jeroen Bakker noreply at git.blender.org
Tue Apr 12 14:28:04 CEST 2022


Commit: ea486bcd3d35efcbdab33e6a4bda371d0a48147a
Author: Jeroen Bakker
Date:   Tue Apr 12 13:59:39 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rBea486bcd3d35efcbdab33e6a4bda371d0a48147a

Remove indices from Triangles. Index of the triangle is in sync with prim list.

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

M	source/blender/blenkernel/BKE_pbvh_pixels.hh
M	source/blender/blenkernel/intern/pbvh_pixels.cc
M	source/blender/blenkernel/intern/pbvh_pixels_seams.cc

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

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index 12f420cfe32..b2cdb9353e3 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -18,22 +18,6 @@
 
 namespace blender::bke::pbvh::pixels {
 
-/**
- * Loop indices. Only stores 2 indices, the third one is always `loop_indices[1] + 1`.
- */
-struct EncodedLoopIndices {
-  int2 encoded;
-
-  EncodedLoopIndices(const int3 decoded) : encoded(decoded.x, decoded.y)
-  {
-  }
-
-  int3 decode() const
-  {
-    return int3(encoded.x, encoded.y, encoded.y + 1);
-  }
-};
-
 struct TrianglePaintInput {
   int3 vert_indices;
   /**
@@ -68,32 +52,11 @@ struct TrianglePaintInput {
 struct Triangles {
   /** Data accessed by the inner loop of the painting brush. */
   Vector<TrianglePaintInput> paint_input;
-  /** Per triangle the index of the polygon it belongs to. */
-  Vector<int> poly_indices;
-  /**
-   * Loop indices per triangle.
-   *
-   * NOTE: is only available during building the triangles. Kept here as in the future we need
-   * the data to calculate normals.
-   */
-  Vector<EncodedLoopIndices> loop_indices;
 
  public:
-  void append(const int3 vert_indices, const EncodedLoopIndices loop_indices, const int poly_index)
+  void append(const int3 vert_indices)
   {
     this->paint_input.append(TrianglePaintInput(vert_indices));
-    this->loop_indices.append(loop_indices);
-    this->poly_indices.append(poly_index);
-  }
-
-  int3 get_loop_indices(const int index) const
-  {
-    return loop_indices[index].decode();
-  }
-
-  int get_poly_index(const int index)
-  {
-    return poly_indices[index];
   }
 
   TrianglePaintInput &get_paint_input(const int index)
@@ -109,8 +72,6 @@ struct Triangles {
   void clear()
   {
     paint_input.clear();
-    loop_indices.clear();
-    poly_indices.clear();
   }
 
   uint64_t size() const
@@ -120,8 +81,7 @@ struct Triangles {
 
   uint64_t mem_size() const
   {
-    return loop_indices.size() * sizeof(EncodedLoopIndices) +
-           paint_input.size() * sizeof(TrianglePaintInput) + poly_indices.size() * sizeof(int);
+    return paint_input.size() * sizeof(TrianglePaintInput);
   }
 };
 
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc b/source/blender/blenkernel/intern/pbvh_pixels.cc
index d9bd921865f..52f16cdb3fa 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -107,15 +107,14 @@ static void init_triangles(PBVH *pbvh, PBVHNode *node, NodeData *node_data, cons
   for (int i = 0; i < node->totprim; i++) {
     const MLoopTri *lt = &pbvh->looptri[node->prim_indices[i]];
     node_data->triangles.append(
-        int3(mloop[lt->tri[0]].v, mloop[lt->tri[1]].v, mloop[lt->tri[2]].v),
-        int3(lt->tri[0], lt->tri[1], lt->tri[2]),
-        lt->poly);
+        int3(mloop[lt->tri[0]].v, mloop[lt->tri[1]].v, mloop[lt->tri[2]].v));
   }
 }
 
 struct EncodePixelsUserData {
   Image *image;
   ImageUser *image_user;
+  PBVH *pbvh;
   Vector<PBVHNode *> *nodes;
   MLoopUV *ldata_uv;
 };
@@ -127,7 +126,7 @@ static void do_encode_pixels(void *__restrict userdata,
   EncodePixelsUserData *data = static_cast<EncodePixelsUserData *>(userdata);
   Image *image = data->image;
   ImageUser image_user = *data->image_user;
-
+  PBVH *pbvh = data->pbvh;
   PBVHNode *node = (*data->nodes)[n];
   NodeData *node_data = static_cast<NodeData *>(node->pixels.node_data);
   LISTBASE_FOREACH (ImageTile *, tile, &data->image->tiles) {
@@ -143,11 +142,11 @@ static void do_encode_pixels(void *__restrict userdata,
 
     Triangles &triangles = node_data->triangles;
     for (int triangle_index = 0; triangle_index < triangles.size(); triangle_index++) {
-      int3 loop_indices = triangles.get_loop_indices(triangle_index);
+      const MLoopTri *lt = &pbvh->looptri[node->prim_indices[triangle_index]];
       float2 uvs[3] = {
-          float2(data->ldata_uv[loop_indices[0]].uv) - tile_offset,
-          float2(data->ldata_uv[loop_indices[1]].uv) - tile_offset,
-          float2(data->ldata_uv[loop_indices[2]].uv) - tile_offset,
+          float2(data->ldata_uv[lt->tri[0]].uv) - tile_offset,
+          float2(data->ldata_uv[lt->tri[1]].uv) - tile_offset,
+          float2(data->ldata_uv[lt->tri[2]].uv) - tile_offset,
       };
 
       const float minv = clamp_f(min_fff(uvs[0].y, uvs[1].y, uvs[2].y), 0.0f, 1.0f);
@@ -313,6 +312,7 @@ static void update_pixels(PBVH *pbvh,
   }
 
   EncodePixelsUserData user_data;
+  user_data.pbvh = pbvh;
   user_data.image = image;
   user_data.image_user = image_user;
   user_data.ldata_uv = ldata_uv;
diff --git a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
index abc6f53e38e..109897a206f 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
@@ -265,15 +265,19 @@ class UVSeamExtender {
     init(context, node, node_data, *tile_node_data);
   }
 
-  void init(ExtendUVContext &context, PBVHNode &node, NodeData &node_data, UDIMTilePixels &tile_data)
+  void init(ExtendUVContext &context,
+            PBVHNode &node,
+            NodeData &node_data,
+            UDIMTilePixels &tile_data)
   {
     for (PackedPixelRow &pixel_row : tile_data.pixel_rows) {
+      const MLoopTri *mt = &context.pbvh->looptri[pixel_row.triangle_index];
       UVSeamExtenderRowPackage row_package(
           context,
           &pixel_row,
           &node_data.triangles.get_paint_input(pixel_row.triangle_index),
           (node.flag & PBVH_RebuildPixels) != 0,
-          node_data.triangles.get_loop_indices(pixel_row.triangle_index));
+          int3(mt->tri[0], mt->tri[1], mt->tri[2]));
       append(row_package);
     }
   }



More information about the Bf-blender-cvs mailing list