Fix T99196: sculpt_update_object calls paint updates for nonpaint tools
Specifically BKE_texpaint_slots_refresh_object was being called, which causes cycles to reset at strange times (like moving the mouse cursor in pose, boundary and various other tools). This (along with some code that checks if the pbvh pixels need to be rebuilt) is only run if is_paint_mode (which used to be needs_colors) is true.
This commit is contained in:
parent
2185943235
commit
c39e932631
Notes:
blender-bot
2023-02-14 06:49:57 +01:00
Referenced by issue #99196, Regression: Rendering in the viewport is constantly restarted by some sculpting brushes and the position of mouse cursor Referenced by issue #98661, 3.2: Potential candidates for corrective releases
|
@ -1773,28 +1773,31 @@ static void sculpt_update_object(Depsgraph *depsgraph,
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* We should rebuild the PBVH_pixels when painting canvas changes.
|
||||
*
|
||||
* The relevant changes are stored/encoded in the paint canvas key.
|
||||
* These include the active uv map, and resolutions.
|
||||
*/
|
||||
if (U.experimental.use_sculpt_texture_paint && ss->pbvh) {
|
||||
char *paint_canvas_key = BKE_paint_canvas_key_get(&scene->toolsettings->paint_mode, ob);
|
||||
if (ss->last_paint_canvas_key == NULL || !STREQ(paint_canvas_key, ss->last_paint_canvas_key)) {
|
||||
MEM_SAFE_FREE(ss->last_paint_canvas_key);
|
||||
ss->last_paint_canvas_key = paint_canvas_key;
|
||||
BKE_pbvh_mark_rebuild_pixels(ss->pbvh);
|
||||
if (is_paint_tool) {
|
||||
/*
|
||||
* We should rebuild the PBVH_pixels when painting canvas changes.
|
||||
*
|
||||
* The relevant changes are stored/encoded in the paint canvas key.
|
||||
* These include the active uv map, and resolutions.
|
||||
*/
|
||||
if (U.experimental.use_sculpt_texture_paint && ss->pbvh) {
|
||||
char *paint_canvas_key = BKE_paint_canvas_key_get(&scene->toolsettings->paint_mode, ob);
|
||||
if (ss->last_paint_canvas_key == NULL ||
|
||||
!STREQ(paint_canvas_key, ss->last_paint_canvas_key)) {
|
||||
MEM_SAFE_FREE(ss->last_paint_canvas_key);
|
||||
ss->last_paint_canvas_key = paint_canvas_key;
|
||||
BKE_pbvh_mark_rebuild_pixels(ss->pbvh);
|
||||
}
|
||||
else {
|
||||
MEM_freeN(paint_canvas_key);
|
||||
}
|
||||
}
|
||||
else {
|
||||
MEM_freeN(paint_canvas_key);
|
||||
}
|
||||
}
|
||||
|
||||
/* We could be more precise when we have access to the active tool. */
|
||||
const bool use_paint_slots = (ob->mode & OB_MODE_SCULPT) != 0;
|
||||
if (use_paint_slots) {
|
||||
BKE_texpaint_slots_refresh_object(scene, ob);
|
||||
/* We could be more precise when we have access to the active tool. */
|
||||
const bool use_paint_slots = (ob->mode & OB_MODE_SCULPT) != 0;
|
||||
if (use_paint_slots) {
|
||||
BKE_texpaint_slots_refresh_object(scene, ob);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1176,12 +1176,12 @@ static void vertex_paint_init_session(Depsgraph *depsgraph,
|
|||
BLI_assert(ob->sculpt == nullptr);
|
||||
ob->sculpt = (SculptSession *)MEM_callocN(sizeof(SculptSession), "sculpt session");
|
||||
ob->sculpt->mode_type = object_mode;
|
||||
BKE_sculpt_update_object_for_edit(depsgraph, ob, true, false, false);
|
||||
BKE_sculpt_update_object_for_edit(depsgraph, ob, true, false, true);
|
||||
}
|
||||
|
||||
static void vwpaint_init_stroke(Depsgraph *depsgraph, Object *ob)
|
||||
{
|
||||
BKE_sculpt_update_object_for_edit(depsgraph, ob, true, false, false);
|
||||
BKE_sculpt_update_object_for_edit(depsgraph, ob, true, false, true);
|
||||
SculptSession *ss = ob->sculpt;
|
||||
|
||||
/* Ensure ss->cache is allocated. It will mostly be initialized in
|
||||
|
|
|
@ -5081,7 +5081,8 @@ static void sculpt_brush_stroke_init(bContext *C, wmOperator *op)
|
|||
/* CTX_data_ensure_evaluated_depsgraph should be used at the end to include the updates of
|
||||
* earlier steps modifying the data. */
|
||||
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
|
||||
BKE_sculpt_update_object_for_edit(depsgraph, ob, need_pmap, need_mask, needs_colors);
|
||||
BKE_sculpt_update_object_for_edit(
|
||||
depsgraph, ob, need_pmap, need_mask, SCULPT_tool_is_paint(brush->sculpt_tool));
|
||||
|
||||
ED_paint_tool_update_sticky_shading_color(C, ob);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue