[#21067] Weight painting doesn't work with mirror modifier enabled.

This commit is contained in:
Campbell Barton 2010-02-09 18:06:57 +00:00
parent 4520bc6edd
commit 82825d5c93
2 changed files with 19 additions and 3 deletions

@ -1771,6 +1771,22 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
if((dataMask & CD_MASK_WEIGHT_MCOL) && (ob->mode & OB_MODE_WEIGHT_PAINT))
add_weight_mcol_dm(ob, dm);
/* constructive modifiers need to have an origindex
* otherwise they wont have anywhere to copy the data from */
if(needMapping) {
int *index, i;
DM_add_vert_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
DM_add_edge_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
DM_add_face_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
index = DM_get_vert_data_layer(dm, CD_ORIGINDEX);
for(i=0; i<dm->numVertData; i++) *index++= i;
index = DM_get_edge_data_layer(dm, CD_ORIGINDEX);
for(i=0; i<dm->numEdgeData; i++) *index++= i;
index = DM_get_face_data_layer(dm, CD_ORIGINDEX);
for(i=0; i<dm->numFaceData; i++) *index++= i;
}
}
/* create an orco derivedmesh in parallel */
@ -2109,9 +2125,9 @@ static void mesh_build_data(Scene *scene, Object *ob, CustomDataMask dataMask)
Object *obact = scene->basact?scene->basact->object:NULL;
int editing = paint_facesel_test(ob);
/* weight paint and face select need original indicies because of selection buffer drawing */
int needMapping = (ob==obact) && (editing || (ob->mode & OB_MODE_WEIGHT_PAINT) || paint_facesel_test(ob));
int needMapping = (ob==obact) && (editing || (ob->mode & OB_MODE_WEIGHT_PAINT) || editing);
float min[3], max[3];
clear_mesh_caches(ob);
mesh_calc_modifiers(scene, ob, NULL, &ob->derivedDeform,

@ -1021,7 +1021,7 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, vo
char *varray = 0;
int numdata = 0, elementsize = 0, offset;
int start = 0, numfaces = 0, prevdraw = 0, curface = 0;
GPUAttrib datatypes[32];
GPUAttrib datatypes[GPU_MAX_ATTRIB]; /* TODO, messing up when switching materials many times - [#21056]*/
memset(&attribs, 0, sizeof(attribs));
GPU_vertex_setup(dm);