[Bf-blender-cvs] [fc42aca8485] temp-3d-texturing-brush-b: Use struct of structs.
Jeroen Bakker
noreply at git.blender.org
Mon Mar 14 14:54:15 CET 2022
Commit: fc42aca8485de60e6eb7a552b4e01b0e36550678
Author: Jeroen Bakker
Date: Mon Mar 14 07:54:55 2022 +0100
Branches: temp-3d-texturing-brush-b
https://developer.blender.org/rBfc42aca8485de60e6eb7a552b4e01b0e36550678
Use struct of structs.
===================================================================
M source/blender/editors/sculpt_paint/sculpt_texture_paint_b.cc
M source/blender/editors/sculpt_paint/sculpt_texture_paint_intern.hh
M source/blender/editors/sculpt_paint/sculpt_texture_paint_pixel_extraction_b.cc
===================================================================
diff --git a/source/blender/editors/sculpt_paint/sculpt_texture_paint_b.cc b/source/blender/editors/sculpt_paint/sculpt_texture_paint_b.cc
index b20e3e85ddd..9b02cab3744 100644
--- a/source/blender/editors/sculpt_paint/sculpt_texture_paint_b.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_texture_paint_b.cc
@@ -62,11 +62,13 @@ static void do_task_cb_ex(void *__restrict userdata,
float4 brush_linear;
srgb_to_linearrgb_v3_v3(brush_linear, brush_srgb);
brush_linear[3] = 1.0f;
+ MVert *mvert = SCULPT_mesh_deformed_mverts_get(ss);
+
const float brush_strength = ss->cache->bstrength;
for (int i = 0; i < node_data->pixels.size(); i++) {
- const float3 &local_pos = node_data->pixels.local_position(i);
+ const float3 &local_pos = node_data->pixels.local_position(i, mvert);
if (!sculpt_brush_test_sq_fn(&test, local_pos)) {
continue;
}
diff --git a/source/blender/editors/sculpt_paint/sculpt_texture_paint_intern.hh b/source/blender/editors/sculpt_paint/sculpt_texture_paint_intern.hh
index ef0fce78b41..31864148588 100644
--- a/source/blender/editors/sculpt_paint/sculpt_texture_paint_intern.hh
+++ b/source/blender/editors/sculpt_paint/sculpt_texture_paint_intern.hh
@@ -3,12 +3,17 @@ namespace blender::ed::sculpt_paint::texture_paint {
struct PixelData {
int2 pixel_pos;
float3 local_pos;
+ float3 weights;
+ int3 vertices;
float4 content;
};
struct Pixels {
Vector<int2> image_coordinates;
Vector<float3> local_positions;
+ Vector<int3> vertices;
+ Vector<float3> weights;
+
Vector<float4> colors;
std::vector<bool> dirty;
@@ -31,6 +36,18 @@ struct Pixels {
return local_positions[index];
}
+ const float3 local_position(uint64_t index, MVert *mvert) const
+ {
+ const int3 &verts = vertices[index];
+ const float3 &weight = weights[index];
+ const float3 &pos1 = mvert[verts.x].co;
+ const float3 &pos2 = mvert[verts.y].co;
+ const float3 &pos3 = mvert[verts.z].co;
+ float3 local_pos;
+ interp_v3_v3v3v3(local_pos, pos1, pos2, pos3, weight);
+ return local_pos;
+ }
+
const float4 &color(uint64_t index) const
{
return colors[index];
@@ -55,6 +72,8 @@ struct Pixels {
image_coordinates.append(pixel.pixel_pos);
local_positions.append(pixel.local_pos);
colors.append(pixel.content);
+ weights.append(pixel.weights);
+ vertices.append(pixel.vertices);
dirty.push_back(false);
}
};
diff --git a/source/blender/editors/sculpt_paint/sculpt_texture_paint_pixel_extraction_b.cc b/source/blender/editors/sculpt_paint/sculpt_texture_paint_pixel_extraction_b.cc
index 09df18270ca..aaf78d7403d 100644
--- a/source/blender/editors/sculpt_paint/sculpt_texture_paint_pixel_extraction_b.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_texture_paint_pixel_extraction_b.cc
@@ -84,6 +84,8 @@ static bool init_using_intersection(SculptSession *ss,
PixelData new_pixel;
new_pixel.local_pos = local_pos;
new_pixel.pixel_pos = xy;
+ new_pixel.vertices = int3(v1_index, v2_index, v3_index);
+ new_pixel.weights = weights;
new_pixel.content = float4(&image_buffer->rect_float[pixel_offset * 4]);
PBVHNode *node = entry.node;
More information about the Bf-blender-cvs
mailing list