forked from bartvdbraak/blender
Fix for crash when sculpting on multires object during playback
- Restored BLI_pbvh_grids_update stuff; - Marc all nodes as changes in ED_sculpt_modifiers_changed, so draw_buffers would be keept correct.
This commit is contained in:
parent
c37884b015
commit
8c4e95da48
@ -2251,8 +2251,16 @@ static struct PBVH *ccgDM_getPBVH(Object *ob, DerivedMesh *dm)
|
||||
if(!ob->sculpt)
|
||||
return NULL;
|
||||
|
||||
if(ob->sculpt->pbvh)
|
||||
if(ob->sculpt->pbvh) {
|
||||
/* pbvh's grids, gridadj and gridfaces points to data inside ccgdm
|
||||
but this can be freed on ccgdm release, this updates the pointers
|
||||
when the ccgdm gets remade, the assumption is that the topology
|
||||
does not change. */
|
||||
ccgdm_create_grids(dm);
|
||||
BLI_pbvh_grids_update(ob->sculpt->pbvh, ccgdm->gridData, ccgdm->gridAdjacency, (void**)ccgdm->gridFaces);
|
||||
|
||||
ccgdm->pbvh = ob->sculpt->pbvh;
|
||||
}
|
||||
|
||||
if(ccgdm->pbvh)
|
||||
return ccgdm->pbvh;
|
||||
|
@ -121,6 +121,8 @@ float BLI_pbvh_node_get_tmin(PBVHNode* node);
|
||||
void BLI_pbvh_update(PBVH *bvh, int flags, float (*face_nors)[3]);
|
||||
void BLI_pbvh_redraw_BB(PBVH *bvh, float bb_min[3], float bb_max[3]);
|
||||
void BLI_pbvh_get_grid_updates(PBVH *bvh, int clear, void ***gridfaces, int *totface);
|
||||
void BLI_pbvh_grids_update(PBVH *bvh, struct DMGridData **grids,
|
||||
struct DMGridAdjacency *gridadj, void **gridfaces);;
|
||||
|
||||
/* vertex deformer */
|
||||
float (*BLI_pbvh_get_vertCos(struct PBVH *pbvh))[3];
|
||||
|
@ -1475,6 +1475,13 @@ void BLI_pbvh_draw(PBVH *bvh, float (*planes)[4], float (*face_nors)[3], int smo
|
||||
}
|
||||
}
|
||||
|
||||
void BLI_pbvh_grids_update(PBVH *bvh, DMGridData **grids, DMGridAdjacency *gridadj, void **gridfaces)
|
||||
{
|
||||
bvh->grids= grids;
|
||||
bvh->gridadj= gridadj;
|
||||
bvh->gridfaces= gridfaces;
|
||||
}
|
||||
|
||||
float (*BLI_pbvh_get_vertCos(PBVH *pbvh))[3]
|
||||
{
|
||||
int a;
|
||||
|
@ -109,6 +109,16 @@ void ED_sculpt_modifiers_changed(Object *ob)
|
||||
}
|
||||
|
||||
sculpt_free_deformMats(ob->sculpt);
|
||||
} else {
|
||||
PBVHNode **nodes;
|
||||
int n, totnode;
|
||||
|
||||
BLI_pbvh_search_gather(ss->pbvh, NULL, NULL, &nodes, &totnode);
|
||||
|
||||
for(n = 0; n < totnode; n++)
|
||||
BLI_pbvh_node_mark_update(nodes[n]);
|
||||
|
||||
MEM_freeN(nodes);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user