[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