== Multires ==
Fixed bug #9680, Crash on render Caused by multires sometimes looking at editmesh data rather than mesh data during render
This commit is contained in:
@@ -61,7 +61,7 @@ void multires_load_cols(struct Mesh *me);
|
||||
void multires_level_to_mesh(struct Object *ob, struct Mesh *me, const int render);
|
||||
void multires_update_levels(struct Mesh *me, const int render);
|
||||
void multires_update_first_level(struct Mesh *me, struct EditMesh *em);
|
||||
void multires_update_customdata(struct MultiresLevel *lvl1, struct CustomData *src,
|
||||
void multires_update_customdata(struct MultiresLevel *lvl1, struct EditMesh *em, struct CustomData *src,
|
||||
struct CustomData *dst, const int type);
|
||||
void multires_customdata_to_mesh(struct Mesh *me, struct EditMesh *em,
|
||||
struct MultiresLevel *lvl, struct CustomData *src,
|
||||
|
||||
@@ -75,7 +75,7 @@ char type_ok(const int type)
|
||||
}
|
||||
|
||||
/* Copy vdata or fdata from Mesh or EditMesh to Multires. */
|
||||
void multires_update_customdata(MultiresLevel *lvl1, CustomData *src, CustomData *dst, const int type)
|
||||
void multires_update_customdata(MultiresLevel *lvl1, EditMesh *em, CustomData *src, CustomData *dst, const int type)
|
||||
{
|
||||
if(src && dst && type_ok(type)) {
|
||||
const int tot= (type == CD_MDEFORMVERT ? lvl1->totvert : lvl1->totface);
|
||||
@@ -84,7 +84,7 @@ void multires_update_customdata(MultiresLevel *lvl1, CustomData *src, CustomData
|
||||
CustomData_free(dst, tot);
|
||||
|
||||
if(CustomData_has_layer(src, type)) {
|
||||
if(G.obedit) {
|
||||
if(em) {
|
||||
EditVert *eve= G.editMesh->verts.first;
|
||||
EditFace *efa= G.editMesh->faces.first;
|
||||
CustomData_copy(src, dst, cdmask(type), CD_CALLOC, tot);
|
||||
@@ -227,9 +227,9 @@ void multires_del_lower_customdata(Multires *mr, MultiresLevel *cr_lvl)
|
||||
void multires_update_first_level(Mesh *me, EditMesh *em)
|
||||
{
|
||||
if(me && me->mr && me->mr->current == 1) {
|
||||
multires_update_customdata(me->mr->levels.first, em ? &em->vdata : &me->vdata,
|
||||
multires_update_customdata(me->mr->levels.first, em, em ? &em->vdata : &me->vdata,
|
||||
&me->mr->vdata, CD_MDEFORMVERT);
|
||||
multires_update_customdata(me->mr->levels.first, em ? &em->fdata : &me->fdata,
|
||||
multires_update_customdata(me->mr->levels.first, em, em ? &em->fdata : &me->fdata,
|
||||
&me->mr->fdata, CD_MTFACE);
|
||||
multires_update_edge_flags(me, em);
|
||||
}
|
||||
|
||||
@@ -373,7 +373,7 @@ void multires_create(Object *ob, Mesh *me)
|
||||
/* Load vertices and vdata (MDeformVerts) */
|
||||
lvl->totvert= em ? BLI_countlist(&em->verts) : me->totvert;
|
||||
me->mr->verts= MEM_callocN(sizeof(MVert)*lvl->totvert,"multires verts");
|
||||
multires_update_customdata(me->mr->levels.first, em ? &em->vdata : &me->vdata,
|
||||
multires_update_customdata(me->mr->levels.first, em, em ? &em->vdata : &me->vdata,
|
||||
&me->mr->vdata, CD_MDEFORMVERT);
|
||||
if(em) eve= em->verts.first;
|
||||
for(i=0; i<lvl->totvert; ++i) {
|
||||
@@ -384,7 +384,7 @@ void multires_create(Object *ob, Mesh *me)
|
||||
/* Load faces and fdata (MTFaces) */
|
||||
lvl->totface= em ? BLI_countlist(&em->faces) : me->totface;
|
||||
lvl->faces= MEM_callocN(sizeof(MultiresFace)*lvl->totface,"multires faces");
|
||||
multires_update_customdata(me->mr->levels.first, em ? &em->fdata : &me->fdata,
|
||||
multires_update_customdata(me->mr->levels.first, em, em ? &em->fdata : &me->fdata,
|
||||
&me->mr->fdata, CD_MTFACE);
|
||||
if(em) efa= em->faces.first;
|
||||
for(i=0; i<lvl->totface; ++i) {
|
||||
|
||||
Reference in New Issue
Block a user