[Bf-blender-cvs] [9a0180e3e7e] temp-T96710-pbvh-pixels: Rename PixelsPackage to PackedPixelRow.

Jeroen Bakker noreply at git.blender.org
Tue Apr 12 12:10:44 CEST 2022


Commit: 9a0180e3e7e1c8f62d2550cadd7afc9e6ec3d3d5
Author: Jeroen Bakker
Date:   Tue Apr 12 09:49:32 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB9a0180e3e7e1c8f62d2550cadd7afc9e6ec3d3d5

Rename PixelsPackage to PackedPixelRow.

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

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
M	source/blender/editors/sculpt_paint/sculpt_paint_image.cc

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

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index 9b953dbee58..a9680cadc58 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -36,10 +36,25 @@ struct EncodedLoopIndices {
 
 struct TrianglePaintInput {
   int3 vert_indices;
-  float3 add_barycentric_coord_x;
-  float3 add_barycentric_coord_y;
+  /**
+   * Delta barycentric coordinates between 2 neighbouring UV's in the U direction.
+   *
+   * Only the first two coordinates are stored. The third should be recalculated
+   */
+  float3 delta_barycentric_coord_u;
+  /** Delta barycentric coordinates between 2 neighbouring UV's in the V direction. */
+  float3 delta_barycentric_coord_v;
 
-  TrianglePaintInput(const int3 vert_indices) : vert_indices(vert_indices)
+  /**
+   * Initially only the vert indices are known.
+   *
+   * delta_barycentric_coord_u/v are initialized in a later stage as it requires image tile
+   * dimensions.
+   */
+  TrianglePaintInput(const int3 vert_indices)
+      : vert_indices(vert_indices),
+        delta_barycentric_coord_u(0.0f, 0.0f, 0.0f),
+        delta_barycentric_coord_v(0.0f, 0.0f, 0.0f)
   {
   }
 };
@@ -113,7 +128,7 @@ struct Triangles {
 /**
  * Encode sequential pixels to reduce memory footprint.
  */
-struct PixelsPackage {
+struct PackedPixelRow {
   /** Barycentric coordinate of the first pixel. */
   float3 start_barycentric_coord;
   /** Image coordinate starting of the first pixel. */
@@ -124,8 +139,6 @@ struct PixelsPackage {
   ushort triangle_index;
 };
 
-using PixelPackages = Vector<PixelsPackage>;
-
 struct TileData {
   short tile_number;
   struct {
@@ -135,7 +148,7 @@ struct TileData {
   /* Dirty region of the tile in image space. */
   rcti dirty_region;
 
-  PixelPackages packages;
+  Vector<PackedPixelRow> pixel_rows;
 
   TileData()
   {
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc b/source/blender/blenkernel/intern/pbvh_pixels.cc
index ad8b810fdbc..a77f592619c 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -97,9 +97,9 @@ static void extract_barycentric_pixels(TileData &tile_data,
 {
   for (int y = miny; y < maxy; y++) {
     bool start_detected = false;
-    PixelsPackage package;
-    package.triangle_index = triangle_index;
-    package.num_pixels = 0;
+    PackedPixelRow pixel_row;
+    pixel_row.triangle_index = triangle_index;
+    pixel_row.num_pixels = 0;
     int x;
 
     for (x = minx; x < maxx; x++) {
@@ -110,8 +110,8 @@ static void extract_barycentric_pixels(TileData &tile_data,
       const bool is_inside = barycentric_inside_triangle_v2(barycentric_weights);
       if (!start_detected && is_inside) {
         start_detected = true;
-        package.start_image_coordinate = ushort2(x, y);
-        package.start_barycentric_coord = barycentric_weights;
+        pixel_row.start_image_coordinate = ushort2(x, y);
+        pixel_row.start_barycentric_coord = barycentric_weights;
       }
       else if (start_detected && !is_inside) {
         break;
@@ -121,8 +121,8 @@ static void extract_barycentric_pixels(TileData &tile_data,
     if (!start_detected) {
       continue;
     }
-    package.num_pixels = x - package.start_image_coordinate.x;
-    tile_data.packages.append(package);
+    pixel_row.num_pixels = x - pixel_row.start_image_coordinate.x;
+    tile_data.pixel_rows.append(pixel_row);
   }
 }
 
@@ -203,15 +203,15 @@ static void do_encode_pixels(void *__restrict userdata,
       const int maxx = min_ii(ceil(maxu * image_buffer->x), image_buffer->x);
 
       TrianglePaintInput &triangle = triangles.get_paint_input(triangle_index);
-      triangle.add_barycentric_coord_x = calc_barycentric_delta_x(image_buffer, uvs, minx, miny);
-      triangle.add_barycentric_coord_y = calc_barycentric_delta_y(image_buffer, uvs, minx, miny);
+      triangle.delta_barycentric_coord_u = calc_barycentric_delta_x(image_buffer, uvs, minx, miny);
+      triangle.delta_barycentric_coord_v = calc_barycentric_delta_y(image_buffer, uvs, minx, miny);
       extract_barycentric_pixels(
           tile_data, image_buffer, triangle_index, uvs, minx, miny, maxx, maxy);
     }
 
     BKE_image_release_ibuf(image, image_buffer, nullptr);
 
-    if (tile_data.packages.is_empty()) {
+    if (tile_data.pixel_rows.is_empty()) {
       continue;
     }
 
@@ -333,10 +333,10 @@ static void apply_watertight_check(PBVH *pbvh, Image *image, ImageUser *image_us
         continue;
       }
 
-      for (PixelsPackage &encoded_pixels : tile_node_data->packages) {
-        int pixel_offset = encoded_pixels.start_image_coordinate.y * image_buffer->x +
-                           encoded_pixels.start_image_coordinate.x;
-        for (int x = 0; x < encoded_pixels.num_pixels; x++) {
+      for (PackedPixelRow &pixel_row : tile_node_data->pixel_rows) {
+        int pixel_offset = pixel_row.start_image_coordinate.y * image_buffer->x +
+                           pixel_row.start_image_coordinate.x;
+        for (int x = 0; x < pixel_row.num_pixels; x++) {
           if (image_buffer->rect_float) {
             if (USE_WATERTIGHT_SEAM_CHECK) {
               image_buffer->rect_float[pixel_offset * 4] += 0.5;
@@ -421,8 +421,8 @@ static void update_pixels(PBVH *pbvh,
       NodeData *node_data = static_cast<NodeData *>(node->pixels.node_data);
       compressed_data_len += node_data->triangles.mem_size();
       for (const TileData &tile_data : node_data->tiles) {
-        compressed_data_len += tile_data.encoded_pixels.size() * sizeof(PixelsPackage);
-        for (const PixelsPackage &encoded_pixels : tile_data.encoded_pixels) {
+        compressed_data_len += tile_data.encoded_pixels.size() * sizeof(PackedPixelRow);
+        for (const PackedPixelRow &encoded_pixels : tile_data.encoded_pixels) {
           num_pixels += encoded_pixels.num_pixels;
         }
       }
diff --git a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
index f3cdf30d355..8a674b06065 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
@@ -53,18 +53,18 @@ struct UVSeamExtenderRowPackage {
   /** Amount of pixels to extend beyond the determined extension to reduce rendering artifacts. */
   static const int ADDITIONAL_EXTEND_X = 1;
 
-  PixelsPackage *package;
+  PackedPixelRow *pixel_row;
   TrianglePaintInput *triangle_paint_data;
   bool is_new;
   int extend_xmin_len = 0;
   int extend_xmax_len = 0;
 
   UVSeamExtenderRowPackage(ExtendUVContext &context,
-                           PixelsPackage *package,
+                           PackedPixelRow *pixel_row,
                            TrianglePaintInput *triangle_paint_data,
                            bool is_new,
                            const int3 &loop_indices)
-      : package(package), triangle_paint_data(triangle_paint_data), is_new(is_new)
+      : pixel_row(pixel_row), triangle_paint_data(triangle_paint_data), is_new(is_new)
   {
     init_extend_x_len(context, loop_indices);
   }
@@ -77,9 +77,9 @@ struct UVSeamExtenderRowPackage {
   void extend_x_start()
   {
     BLI_assert(extend_xmin_len != 0);
-    package->num_pixels += 1;
-    package->start_image_coordinate[0] -= 1;
-    package->start_barycentric_coord -= triangle_paint_data->add_barycentric_coord_x;
+    pixel_row->num_pixels += 1;
+    pixel_row->start_image_coordinate[0] -= 1;
+    pixel_row->start_barycentric_coord -= triangle_paint_data->delta_barycentric_coord_u;
     extend_xmin_len--;
   }
 
@@ -91,7 +91,7 @@ struct UVSeamExtenderRowPackage {
   void extend_x_end()
   {
     BLI_assert(extend_xmax_len != 0);
-    package->num_pixels += 1;
+    pixel_row->num_pixels += 1;
     extend_xmax_len--;
   }
 
@@ -127,7 +127,7 @@ struct UVSeamExtenderRowPackage {
                           const float2 triangle_uvs[3]) const
   {
     uint16_t pixel_offset = offset + 1;
-    ushort2 pixel = package->start_image_coordinate - ushort2(pixel_offset, 0);
+    ushort2 pixel = pixel_row->start_image_coordinate - ushort2(pixel_offset, 0);
     return intersect_uv_pixel(pixel, image_buffer, triangle_uvs);
   }
 
@@ -145,7 +145,7 @@ struct UVSeamExtenderRowPackage {
                           const float2 triangle_uvs[3]) const
   {
     uint16_t pixel_offset = offset + 1;
-    ushort2 pixel = package->start_image_coordinate + ushort2(pixel_offset, 0);
+    ushort2 pixel = pixel_row->start_image_coordinate + ushort2(pixel_offset, 0);
     return intersect_uv_pixel(pixel, image_buffer, triangle_uvs);
   }
 };
@@ -165,7 +165,7 @@ class UVSeamExtenderRow : public Vector<UVSeamExtenderRowPackage> {
   {
     std::sort(
         begin(), end(), [](const UVSeamExtenderRowPackage &a, const UVSeamExtenderRowPackage &b) {
-          return a.package->start_image_coordinate[0] < b.package->start_image_coordinate[0];
+          return a.pixel_row->start_image_coordinate[0] < b.pixel_row->start_image_coordinate[0];
         });
     extend_x_start();
     extend_x_end(image_buffer_width);
@@ -180,7 +180,7 @@ class UVSeamExtenderRow : public Vector<UVSeamExtenderRowPackage> {
     for (UVSeamExtenderRowPackage &package : *this) {
       if (package.is_new) {
         while (package.should_extend_start()) {
-          if (package.package->start_image_coordinate[0] - 1 <= prev_package_x) {
+          if (package.pixel_row->start_image_coordinate[0] - 1 <= prev_package_x) {
             /* No room left for extending. */
             break;
           }
@@ -188,7 +188,8 @@ class UVSeamExtenderRow : public Vector<UVSeamExtenderRowPackage> {
         }
       }
 
-      prev_package_x = package.package->start_image_coordinate[0] + package.package->num_pixels;
+      prev_package_x = package.pixel_row->start_image_coordinate[0] +
+                       package.pixel_row->num_pixels;
       index++;
     }
   }
@@ -201,13 +202,13 @@ class UVSeamExtenderRow : public Vector<UVSeamExtenderRowPackage> {
         int next_package_x;
         if (index < size() - 1) {
           const UVSeamExtenderRowPackage &next_package = (*this)[index + 1];
-          next_package_x

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list