[Bf-blender-cvs] [87e15ada9b1] temp-T101739-fix-seam-bleeding-non-manifold: Fix some todos.

Jeroen Bakker noreply at git.blender.org
Tue Jan 24 15:24:31 CET 2023


Commit: 87e15ada9b1270199c17bfec4ce32cf087f8ae93
Author: Jeroen Bakker
Date:   Thu Jan 19 15:03:18 2023 +0100
Branches: temp-T101739-fix-seam-bleeding-non-manifold
https://developer.blender.org/rB87e15ada9b1270199c17bfec4ce32cf087f8ae93

Fix some todos.

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

M	source/blender/blenkernel/BKE_pbvh_pixels.hh
M	source/blender/blenkernel/intern/pbvh_pixels_copy.cc

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

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index f5d43710206..54f2fabd919 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -261,6 +261,8 @@ struct NodeData {
 // TODO: move to image wrappers?
 // TODO: Add compile time checks.
 template<typename T, int Channels = 4> struct ImageBufferAccessor {
+ // BLI_static_assert(constexpr(std::is_same_v<T, int> || std::is_same_v<T, float>);
+
   ImBuf &image_buffer;
 
   ImageBufferAccessor(ImBuf &image_buffer) : image_buffer(image_buffer)
@@ -312,7 +314,6 @@ struct CopyPixelGroup {
   int2 start_destination;
   int2 start_source_1;
   int64_t start_delta_index;
-  // TODO: extract from next group.
   int num_deltas;
 };
 
diff --git a/source/blender/blenkernel/intern/pbvh_pixels_copy.cc b/source/blender/blenkernel/intern/pbvh_pixels_copy.cc
index 0dae7d306b0..bc9de2747e1 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels_copy.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels_copy.cc
@@ -23,7 +23,7 @@
 
 namespace blender::bke::pbvh::pixels {
 
-const int GRAIN_SIZE = 128;
+const int THREADING_GRAIN_SIZE = 128;
 
 /** Coordinate space of a coordinate. */
 enum class CoordSpace {
@@ -125,9 +125,6 @@ class NonManifoldUVEdges : public Vector<Edge<CoordSpace::UV>> {
                                           const int2 tile_resolution) const
   {
     NonManifoldTileEdges result;
-    // TODO: Only add edges that intersects with the given tile.
-    // TODO: Clamp edges to tile bounds.
-
     for (const Edge<CoordSpace::UV> &uv_edge : *this) {
       const Edge<CoordSpace::Tile> tile_edge = convert_coord_space(
           uv_edge, image_tile, tile_resolution);
@@ -392,10 +389,9 @@ struct Rows {
     int2 found_source(0);
 
     for (int sy : IndexRange(bounds.ymin, BLI_rcti_size_y(&bounds))) {
-      // TODO don't use row view here.
-      RowView row(*this, sy);
+      int pixel_index = sy * resolution.x;
       for (int sx : IndexRange(bounds.xmin, BLI_rcti_size_x(&bounds))) {
-        Pixel &source = row.pixels[sx];
+        Pixel &source = pixels[pixel_index + sx];
         if (source.type != PixelType::Brush) {
           continue;
         }
@@ -424,18 +420,15 @@ struct Rows {
   void find_copy_source(Vector<std::reference_wrapper<Pixel>> &selected_pixels,
                         const NonManifoldTileEdges &tile_edges)
   {
-    threading::parallel_for(IndexRange(selected_pixels.size()), GRAIN_SIZE, [&](IndexRange range) {
-      for (int selected_pixel_index : range) {
-        Pixel &current_pixel = selected_pixels[selected_pixel_index];
-        find_copy_source(current_pixel, tile_edges);
-      }
-    });
+    threading::parallel_for(
+        IndexRange(selected_pixels.size()), THREADING_GRAIN_SIZE, [&](IndexRange range) {
+          for (int selected_pixel_index : range) {
+            Pixel &current_pixel = selected_pixels[selected_pixel_index];
+            find_copy_source(current_pixel, tile_edges);
+          }
+        });
   }
 
-  /**
-   * Mark pixels that needs to be evaluated. Pixels that are marked will have its `edge_index`
-   * filled.
-   */
   Vector<std::reference_wrapper<Pixel>> filter_pixels_for_closer_examination(
       const NonManifoldTileEdges &tile_edges)
   {
@@ -504,20 +497,10 @@ struct Rows {
         last_command = elem.copy_command;
       }
     }
-
-    /* Shrink vectors to fit the actual data it contains. From now on these vectors should be
-     * immutable. */
-    // copy_tile.groups.resize(copy_tile.groups.size());
-    // copy_tile.command_deltas.resize(copy_tile.command_deltas.size());
   }
 
 };  // namespace blender::bke::pbvh::pixels
 
-static void copy_pixels_reinit(CopyPixelTiles &tiles)
-{
-  tiles.clear();
-}
-
 void BKE_pbvh_pixels_copy_update(PBVH &pbvh,
                                  Image &image,
                                  ImageUser &image_user,
@@ -525,7 +508,7 @@ void BKE_pbvh_pixels_copy_update(PBVH &pbvh,
 {
   TIMEIT_START(pbvh_pixels_copy_update);
   PBVHData &pbvh_data = BKE_pbvh_pixels_data_get(pbvh);
-  copy_pixels_reinit(pbvh_data.tiles_copy_pixels);
+  pbvh_data.tiles_copy_pixels.clear();
   const NonManifoldUVEdges non_manifold_edges(mesh_data);
   if (non_manifold_edges.is_empty()) {
     /* Early exit: No non manifold edges detected. */
@@ -588,8 +571,7 @@ void BKE_pbvh_pixels_copy_pixels(PBVH &pbvh,
   }
 
   CopyPixelTile &tile = pixel_tile->get();
-  const int grain_size = 128;
-  threading::parallel_for(tile.groups.index_range(), grain_size, [&](IndexRange range) {
+  threading::parallel_for(tile.groups.index_range(), THREADING_GRAIN_SIZE, [&](IndexRange range) {
     tile.copy_pixels(*tile_buffer, range);
   });



More information about the Bf-blender-cvs mailing list