Refactor: Sculpt: Remove SculptSession scene pointer

Part of #118145.
This commit is contained in:
Hans Goudey
2024-09-13 10:25:30 -04:00
parent bde4efe1f5
commit 613e535fb8
8 changed files with 29 additions and 23 deletions

View File

@@ -403,7 +403,6 @@ struct SculptSession : blender::NonCopyable, blender::NonMovable {
/* TODO(jbakker): Replace rv3d and v3d with ViewContext */
RegionView3D *rv3d = nullptr;
View3D *v3d = nullptr;
Scene *scene = nullptr;
/* Dynamic mesh preview */
blender::Array<int> preview_verts;

View File

@@ -1977,8 +1977,6 @@ static void sculpt_update_object(Depsgraph *depsgraph,
ss.building_vp_handle = false;
ss.scene = scene;
ss.shapekey_active = (mmd == nullptr) ? BKE_keyblock_from_object(ob) : nullptr;
/* NOTE: Weight pPaint require mesh info for loop lookup, but it never uses multires code path,

View File

@@ -3658,7 +3658,8 @@ static void do_brush_action(const Depsgraph &depsgraph,
do_displacement_smear_brush(depsgraph, sd, ob, node_mask);
break;
case SCULPT_BRUSH_TYPE_PAINT:
color::do_paint_brush(depsgraph, paint_mode_settings, sd, ob, node_mask, texnode_mask);
color::do_paint_brush(
scene, depsgraph, paint_mode_settings, sd, ob, node_mask, texnode_mask);
break;
case SCULPT_BRUSH_TYPE_SMEAR:
color::do_smear_brush(depsgraph, sd, ob, node_mask);
@@ -5686,7 +5687,7 @@ static int sculpt_brush_stroke_invoke(bContext *C, wmOperator *op, const wmEvent
int ignore_background_click;
int retval;
Object &ob = *CTX_data_active_object(C);
Scene &scene = *CTX_data_scene(C);
const View3D *v3d = CTX_wm_view3d(C);
const Base *base = CTX_data_active_base(C);
/* Test that ob is visible; otherwise we won't be able to get evaluated data
@@ -5709,7 +5710,7 @@ static int sculpt_brush_stroke_invoke(bContext *C, wmOperator *op, const wmEvent
return OPERATOR_CANCELLED;
}
if (SCULPT_brush_type_is_mask(brush.sculpt_brush_type)) {
MultiresModifierData *mmd = BKE_sculpt_multires_active(ss.scene, &ob);
MultiresModifierData *mmd = BKE_sculpt_multires_active(&scene, &ob);
BKE_sculpt_mask_layers_ensure(CTX_data_depsgraph_pointer(C), CTX_data_main(C), &ob, mmd);
}
if (!SCULPT_brush_type_is_attribute_only(brush.sculpt_brush_type) &&

View File

@@ -61,7 +61,8 @@ float4 color_vert_get(OffsetIndices<int> faces,
bke::GAttributeReader active_color_attribute(const Mesh &mesh);
bke::GSpanAttributeWriter active_color_attribute_for_write(Mesh &mesh);
void do_paint_brush(const Depsgraph &depsgraph,
void do_paint_brush(const Scene &scene,
const Depsgraph &depsgraph,
PaintModeSettings &paint_mode_settings,
const Sculpt &sd,
Object &ob,

View File

@@ -2478,13 +2478,14 @@ static void cache_initial_config_set(bContext *C, wmOperator *op, Cache &expand_
expand_cache.brush_gradient = false;
/* Texture and color data from the active Brush. */
Scene &scene = *CTX_data_scene(C);
Object &ob = *CTX_data_active_object(C);
const Sculpt &sd = *CTX_data_tool_settings(C)->sculpt;
SculptSession &ss = *ob.sculpt;
expand_cache.brush = BKE_paint_brush_for_read(&sd.paint);
BKE_curvemapping_init(expand_cache.brush->curve);
copy_v4_fl(expand_cache.fill_color, 1.0f);
copy_v3_v3(expand_cache.fill_color, BKE_brush_color_get(ss.scene, expand_cache.brush));
copy_v3_v3(expand_cache.fill_color, BKE_brush_color_get(&scene, expand_cache.brush));
IMB_colormanagement_srgb_to_scene_linear_v3(expand_cache.fill_color, expand_cache.fill_color);
expand_cache.scene = CTX_data_scene(C);
@@ -2584,7 +2585,8 @@ static int sculpt_expand_invoke(bContext *C, wmOperator *op, const wmEvent *even
}
if (ss.expand_cache->target == TargetType::Mask) {
MultiresModifierData *mmd = BKE_sculpt_multires_active(ss.scene, &ob);
Scene &scene = *CTX_data_scene(C);
MultiresModifierData *mmd = BKE_sculpt_multires_active(&scene, &ob);
BKE_sculpt_mask_layers_ensure(depsgraph, CTX_data_main(C), &ob, mmd);
if (RNA_boolean_get(op->ptr, "use_auto_mask")) {

View File

@@ -911,7 +911,8 @@ bool SCULPT_paint_image_canvas_get(PaintModeSettings &paint_mode_settings,
Object &ob,
Image **r_image,
ImageUser **r_image_user) ATTR_NONNULL();
void SCULPT_do_paint_brush_image(const Depsgraph &depsgraph,
void SCULPT_do_paint_brush_image(const Scene &scene,
const Depsgraph &depsgraph,
PaintModeSettings &paint_mode_settings,
const Sculpt &sd,
Object &ob,

View File

@@ -337,7 +337,8 @@ static void do_color_smooth_task(const Depsgraph &depsgraph,
}
}
static void do_paint_brush_task(const Depsgraph &depsgraph,
static void do_paint_brush_task(const Scene &scene,
const Depsgraph &depsgraph,
Object &object,
const Span<float3> vert_positions,
const Span<float3> vert_normals,
@@ -357,7 +358,7 @@ static void do_paint_brush_task(const Depsgraph &depsgraph,
const Mesh &mesh = *static_cast<Mesh *>(object.data);
const float bstrength = fabsf(ss.cache->bstrength);
const float alpha = BKE_brush_alpha_get(ss.scene, &brush);
const float alpha = BKE_brush_alpha_get(&scene, &brush);
const Span<int> verts = node.verts();
@@ -407,9 +408,8 @@ static void do_paint_brush_task(const Depsgraph &depsgraph,
}
}
const float3 brush_color_rgb = ss.cache->invert ?
BKE_brush_secondary_color_get(ss.scene, &brush) :
BKE_brush_color_get(ss.scene, &brush);
const float3 brush_color_rgb = ss.cache->invert ? BKE_brush_secondary_color_get(&scene, &brush) :
BKE_brush_color_get(&scene, &brush);
float4 brush_color(brush_color_rgb, 1.0f);
IMB_colormanagement_srgb_to_scene_linear_v3(brush_color, brush_color);
@@ -520,7 +520,8 @@ static void do_sample_wet_paint_task(const Object &object,
}
}
void do_paint_brush(const Depsgraph &depsgraph,
void do_paint_brush(const Scene &scene,
const Depsgraph &depsgraph,
PaintModeSettings &paint_mode_settings,
const Sculpt &sd,
Object &ob,
@@ -528,7 +529,7 @@ void do_paint_brush(const Depsgraph &depsgraph,
const IndexMask &texnode_mask)
{
if (SCULPT_use_image_paint_brush(paint_mode_settings, ob)) {
SCULPT_do_paint_brush_image(depsgraph, paint_mode_settings, sd, ob, texnode_mask);
SCULPT_do_paint_brush_image(scene, depsgraph, paint_mode_settings, sd, ob, texnode_mask);
return;
}
@@ -654,7 +655,8 @@ void do_paint_brush(const Depsgraph &depsgraph,
threading::parallel_for(node_mask.index_range(), 1, [&](const IndexRange range) {
ColorPaintLocalData &tls = all_tls.local();
node_mask.slice(range).foreach_index([&](const int i) {
do_paint_brush_task(depsgraph,
do_paint_brush_task(scene,
depsgraph,
ob,
vert_positions,
vert_normals,

View File

@@ -250,7 +250,8 @@ static BitVector<> init_uv_primitives_brush_test(SculptSession &ss,
return brush_test;
}
static void do_paint_pixels(const Depsgraph &depsgraph,
static void do_paint_pixels(const Scene &scene,
const Depsgraph &depsgraph,
Object &object,
const Brush &brush,
ImageData image_data,
@@ -279,8 +280,8 @@ static void do_paint_pixels(const Depsgraph &depsgraph,
brush_color[2] = float((hash >> 16) & 255) / 255.0f;
#else
copy_v3_v3(brush_color,
ss.cache->invert ? BKE_brush_secondary_color_get(ss.scene, &brush) :
BKE_brush_color_get(ss.scene, &brush));
ss.cache->invert ? BKE_brush_secondary_color_get(&scene, &brush) :
BKE_brush_color_get(&scene, &brush));
#endif
brush_color[3] = 1.0f;
@@ -496,7 +497,8 @@ bool SCULPT_use_image_paint_brush(PaintModeSettings &settings, Object &ob)
return BKE_paint_canvas_image_get(&settings, &ob, &image, &image_user);
}
void SCULPT_do_paint_brush_image(const Depsgraph &depsgraph,
void SCULPT_do_paint_brush_image(const Scene &scene,
const Depsgraph &depsgraph,
PaintModeSettings &paint_mode_settings,
const Sculpt &sd,
Object &ob,
@@ -517,7 +519,7 @@ void SCULPT_do_paint_brush_image(const Depsgraph &depsgraph,
do_push_undo_tile(*image_data.image, *image_data.image_user, nodes[i]);
});
node_mask.foreach_index(GrainSize(1), [&](const int i) {
do_paint_pixels(depsgraph, ob, *brush, image_data, nodes[i]);
do_paint_pixels(scene, depsgraph, ob, *brush, image_data, nodes[i]);
});
fix_non_manifold_seam_bleeding(ob, *image_data.image, *image_data.image_user, nodes, node_mask);