Fix T53347: Vertex paint crash

Vertex paint was still using sculpt mode brush (which can be NULL).
This commit is contained in:
Campbell Barton
2018-02-09 11:58:19 +11:00
parent 859379ac48
commit 5e65791516

View File

@@ -4591,16 +4591,15 @@ static bool sculpt_any_smooth_mode(const Brush *brush,
(brush->mask_tool == BRUSH_MASK_SMOOTH))); (brush->mask_tool == BRUSH_MASK_SMOOTH)));
} }
static void sculpt_stroke_modifiers_check(const bContext *C, Object *ob) static void sculpt_stroke_modifiers_check(const bContext *C, Object *ob, const Brush *brush)
{ {
SculptSession *ss = ob->sculpt; SculptSession *ss = ob->sculpt;
if (ss->kb || ss->modifiers_active) { if (ss->kb || ss->modifiers_active) {
Sculpt *sd = CTX_data_tool_settings(C)->sculpt; Scene *scene = CTX_data_scene(C);
Brush *brush = BKE_paint_brush(&sd->paint); Sculpt *sd = scene->toolsettings->sculpt;
bool need_pmap = sculpt_any_smooth_mode(brush, ss->cache, 0);
BKE_sculpt_update_mesh_elements(CTX_data_scene(C), sd, ob, BKE_sculpt_update_mesh_elements(scene, sd, ob, need_pmap, false);
sculpt_any_smooth_mode(brush, ss->cache, 0), false);
} }
} }
@@ -4729,7 +4728,9 @@ bool sculpt_stroke_get_location(bContext *C, float out[3], const float mouse[2])
cache = ss->cache; cache = ss->cache;
original = (cache) ? cache->original : 0; original = (cache) ? cache->original : 0;
sculpt_stroke_modifiers_check(C, ob); const Brush *brush = BKE_paint_brush(BKE_paint_get_active_from_context(C));
sculpt_stroke_modifiers_check(C, ob, brush);
depth = sculpt_raycast_init(&vc, mouse, ray_start, ray_end, ray_normal, original); depth = sculpt_raycast_init(&vc, mouse, ray_start, ray_end, ray_normal, original);
@@ -4755,7 +4756,6 @@ bool sculpt_stroke_get_location(bContext *C, float out[3], const float mouse[2])
} }
if (hit == false) { if (hit == false) {
const Brush *brush = BKE_paint_brush(BKE_paint_get_active_from_context(C));
if (ELEM(brush->falloff_shape, PAINT_FALLOFF_SHAPE_TUBE)) { if (ELEM(brush->falloff_shape, PAINT_FALLOFF_SHAPE_TUBE)) {
SculptFindNearestToRayData srd = { SculptFindNearestToRayData srd = {
.original = original, .original = original,
@@ -4940,7 +4940,7 @@ static void sculpt_stroke_update_step(bContext *C, struct PaintStroke *UNUSED(st
SculptSession *ss = ob->sculpt; SculptSession *ss = ob->sculpt;
const Brush *brush = BKE_paint_brush(&sd->paint); const Brush *brush = BKE_paint_brush(&sd->paint);
sculpt_stroke_modifiers_check(C, ob); sculpt_stroke_modifiers_check(C, ob, brush);
sculpt_update_cache_variants(C, sd, ob, itemptr); sculpt_update_cache_variants(C, sd, ob, itemptr);
sculpt_restore_mesh(sd, ob); sculpt_restore_mesh(sd, ob);
@@ -5015,7 +5015,7 @@ static void sculpt_stroke_done(const bContext *C, struct PaintStroke *UNUSED(str
BLI_assert(brush == ss->cache->brush); /* const, so we shouldn't change. */ BLI_assert(brush == ss->cache->brush); /* const, so we shouldn't change. */
ups->draw_inverted = false; ups->draw_inverted = false;
sculpt_stroke_modifiers_check(C, ob); sculpt_stroke_modifiers_check(C, ob, brush);
/* Alt-Smooth */ /* Alt-Smooth */
if (ss->cache->alt_smooth) { if (ss->cache->alt_smooth) {
@@ -5832,7 +5832,9 @@ static void sample_detail(bContext *C, int ss_co[2])
sd = CTX_data_tool_settings(C)->sculpt; sd = CTX_data_tool_settings(C)->sculpt;
ob = vc.obact; ob = vc.obact;
sculpt_stroke_modifiers_check(C, ob); Brush *brush = BKE_paint_brush(&sd->paint);
sculpt_stroke_modifiers_check(C, ob, brush);
depth = sculpt_raycast_init(&vc, mouse, ray_start, ray_end, ray_normal, false); depth = sculpt_raycast_init(&vc, mouse, ray_start, ray_end, ray_normal, false);