[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