[Bf-blender-cvs] [220b10a6895] temp-T96710-pbvh-pixels: Use context to pass common parameters.

Jeroen Bakker noreply at git.blender.org
Fri Apr 8 15:21:16 CEST 2022


Commit: 220b10a6895ee19dd9a84cc5098f5085124ec1ae
Author: Jeroen Bakker
Date:   Fri Apr 8 15:21:13 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB220b10a6895ee19dd9a84cc5098f5085124ec1ae

Use context to pass common parameters.

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

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

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

diff --git a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
index ad5b12edfe2..1f04c1e6957 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
@@ -11,6 +11,12 @@
 namespace blender::bke::pbvh::pixels {
 using namespace blender::bke::image;
 
+struct ExtendUVContext {
+  PBVH *pbvh;
+  const ImBuf *image_buffer;
+  const MLoopUV *ldata_uv;
+};
+
 bool intersect_uv_pixel(const ushort2 &pixel_coordinate,
                         const ImBuf &image_buffer,
                         const float2 triangle_uvs[3])
@@ -53,15 +59,14 @@ struct UVSeamExtenderRowPackage {
   int extend_xmin_len = 0;
   int extend_xmax_len = 0;
 
-  UVSeamExtenderRowPackage(PixelsPackage *package,
+  UVSeamExtenderRowPackage(ExtendUVContext &context,
+                           PixelsPackage *package,
                            TrianglePaintInput *triangle_paint_data,
-                           const ImBuf &image_buffer,
                            bool is_new,
-                           const int3 loop_indices,
-                           const MLoopUV *ldata_uv)
+                           const int3 &loop_indices)
       : package(package), triangle_paint_data(triangle_paint_data), is_new(is_new)
   {
-    init_extend_x_len(image_buffer, loop_indices, ldata_uv);
+    init_extend_x_len(context, loop_indices);
   }
 
   bool should_extend_start() const
@@ -91,29 +96,27 @@ struct UVSeamExtenderRowPackage {
   }
 
  private:
-  void init_extend_x_len(const ImBuf &image_buffer,
-                         const int3 loop_indices,
-                         const MLoopUV *ldata_uv)
+  void init_extend_x_len(ExtendUVContext &context, const int3 &loop_indices)
   {
     if (!is_new) {
       return;
     }
 
     float2 triangle_uvs[3];
-    triangle_uvs[0] = ldata_uv[loop_indices[0]].uv;
-    triangle_uvs[1] = ldata_uv[loop_indices[1]].uv;
-    triangle_uvs[2] = ldata_uv[loop_indices[2]].uv;
+    triangle_uvs[0] = context.ldata_uv[loop_indices[0]].uv;
+    triangle_uvs[1] = context.ldata_uv[loop_indices[1]].uv;
+    triangle_uvs[2] = context.ldata_uv[loop_indices[2]].uv;
 
-    init_extend_xmin_len(image_buffer, triangle_uvs);
-    init_extend_xmax_len(image_buffer, triangle_uvs);
+    init_extend_xmin_len(context, triangle_uvs);
+    init_extend_xmax_len(context, triangle_uvs);
     BLI_assert(extend_xmin_len);
     BLI_assert(extend_xmax_len);
   }
 
-  void init_extend_xmin_len(const ImBuf &image_buffer, const float2 triangle_uvs[3])
+  void init_extend_xmin_len(ExtendUVContext &context, const float2 triangle_uvs[3])
   {
     int result = 0;
-    while (should_extend_xmin(image_buffer, result, triangle_uvs)) {
+    while (should_extend_xmin(*context.image_buffer, result, triangle_uvs)) {
       result++;
     }
     extend_xmin_len = result + ADDITIONAL_EXTEND_X;
@@ -128,10 +131,10 @@ struct UVSeamExtenderRowPackage {
     return intersect_uv_pixel(pixel, image_buffer, triangle_uvs);
   }
 
-  void init_extend_xmax_len(const ImBuf &image_buffer, const float2 triangle_uvs[3])
+  void init_extend_xmax_len(ExtendUVContext &context, const float2 triangle_uvs[3])
   {
     int result = 0;
-    while (should_extend_xmax(image_buffer, result, triangle_uvs)) {
+    while (should_extend_xmax(*context.image_buffer, result, triangle_uvs)) {
       result++;
     }
     extend_xmax_len = result + ADDITIONAL_EXTEND_X;
@@ -223,14 +226,11 @@ class UVSeamExtender {
   int image_buffer_width_;
 
  public:
-  explicit UVSeamExtender(PBVH &pbvh,
-                          const ImageTileWrapper &image_tile,
-                          const ImBuf &image_buffer,
-                          const MLoopUV *ldata_uv)
-      : image_buffer_width_(image_buffer.x)
+  explicit UVSeamExtender(ExtendUVContext &context, const ImageTileWrapper &image_tile)
+      : image_buffer_width_(context.image_buffer->x)
   {
-    rows.resize(image_buffer.y);
-    init(pbvh, image_tile, image_buffer, ldata_uv);
+    rows.resize(context.image_buffer->y);
+    init(context, image_tile);
   }
 
   void extend_x()
@@ -243,47 +243,36 @@ class UVSeamExtender {
   }
 
  private:
-  void init(PBVH &pbvh,
-            const ImageTileWrapper &image_tile,
-            const ImBuf &image_buffer,
-            const MLoopUV *ldata_uv)
+  void init(ExtendUVContext &context, const ImageTileWrapper &image_tile)
   {
-    for (int n = 0; n < pbvh.totnode; n++) {
-      PBVHNode &node = pbvh.nodes[n];
+    for (int n = 0; n < context.pbvh->totnode; n++) {
+      PBVHNode &node = context.pbvh->nodes[n];
       if ((node.flag & PBVH_Leaf) == 0) {
         continue;
       }
-      init(node, image_tile, image_buffer, ldata_uv);
+      init(context, node, image_tile);
     }
   }
 
-  void init(PBVHNode &node,
-            const ImageTileWrapper &image_tile,
-            const ImBuf &image_buffer,
-            const MLoopUV *ldata_uv)
+  void init(ExtendUVContext &context, PBVHNode &node, const ImageTileWrapper &image_tile)
   {
     NodeData &node_data = *static_cast<NodeData *>(node.pixels.node_data);
     TileData *tile_node_data = node_data.find_tile_data(image_tile);
     if (tile_node_data == nullptr) {
       return;
     }
-    init(node, node_data, *tile_node_data, image_buffer, ldata_uv);
+    init(context, node, node_data, *tile_node_data);
   }
 
-  void init(PBVHNode &node,
-            NodeData &node_data,
-            TileData &tile_data,
-            const ImBuf &image_buffer,
-            const MLoopUV *ldata_uv)
+  void init(ExtendUVContext &context, PBVHNode &node, NodeData &node_data, TileData &tile_data)
   {
     for (PixelsPackage &package : tile_data.packages) {
       UVSeamExtenderRowPackage row_package(
+          context,
           &package,
           &node_data.triangles.get_paint_input(package.triangle_index),
-          image_buffer,
           (node.flag & PBVH_UpdatePixels) != 0,
-          node_data.triangles.get_loop_indices(package.triangle_index),
-          ldata_uv);
+          node_data.triangles.get_loop_indices(package.triangle_index));
       append(row_package);
     }
   }
@@ -300,15 +289,21 @@ void BKE_pbvh_pixels_fix_seams(PBVH &pbvh,
                                ImageUser &image_user,
                                const MLoopUV *ldata_uv)
 {
+  ExtendUVContext context;
+  context.ldata_uv = ldata_uv;
+  context.pbvh = &pbvh;
+
   ImageUser local_image_user = image_user;
   LISTBASE_FOREACH (ImageTile *, tile_data, &image.tiles) {
-    image::ImageTileWrapper image_tile(tile_data);
+    ImageTileWrapper image_tile(tile_data);
+
     local_image_user.tile = image_tile.get_tile_number();
     ImBuf *image_buffer = BKE_image_acquire_ibuf(&image, &local_image_user, NULL);
     if (image_buffer == nullptr) {
       continue;
     }
-    UVSeamExtender extender(pbvh, image_tile, *image_buffer, ldata_uv);
+    context.image_buffer = image_buffer;
+    UVSeamExtender extender(context, image_tile);
     extender.extend_x();
     BKE_image_release_ibuf(&image, image_buffer, NULL);
   }



More information about the Bf-blender-cvs mailing list