forked from bartvdbraak/blender
Removed Freestyle-specific code from DerivedMesh.c.
The removed code was necessary due to a logical bug in the use of CD_ORIGINDEX layer entries. Previously the index values were used to refer to the edges/polys of the derived mesh, assuming that the derived mesh edges/polys consisted of those from the original mesh plus newly added edges/polys. This assumption was not correct, although it worked well for several modifiers such as Mirror and Solidify. Now the index values are specifically used to reference the edge/polys of the original mesh.
This commit is contained in:
parent
b4bd232da0
commit
4ff8041e0e
@ -1841,36 +1841,6 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef WITH_FREESTYLE
|
||||
/* This Freestyle-specific code still needs to get the Subdivision Surface modifier working */
|
||||
if (CustomData_has_layer(&me->edata, CD_FREESTYLE_EDGE)) {
|
||||
FreestyleEdge *fed = DM_get_edge_data_layer(finaldm, CD_FREESTYLE_EDGE);
|
||||
if (fed) {
|
||||
FreestyleEdge *source = CustomData_get_layer(&me->edata, CD_FREESTYLE_EDGE);
|
||||
int a;
|
||||
for (a = 0; a < me->totedge; a++) {
|
||||
fed[a].flag = source[a].flag;
|
||||
}
|
||||
for (; a < finaldm->numEdgeData; a++) {
|
||||
fed[a].flag = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CustomData_has_layer(&me->pdata, CD_FREESTYLE_FACE)) {
|
||||
FreestyleFace *ffa = DM_get_poly_data_layer(finaldm, CD_FREESTYLE_FACE);
|
||||
if (ffa) {
|
||||
FreestyleFace *source = CustomData_get_layer(&me->pdata, CD_FREESTYLE_FACE);
|
||||
int a;
|
||||
for (a = 0; a < me->totpoly; a++) {
|
||||
ffa[a].flag = source[a].flag;
|
||||
}
|
||||
for (; a < finaldm->numPolyData; a++) {
|
||||
ffa[a].flag = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WITH_GAMEENGINE
|
||||
/* NavMesh - this is a hack but saves having a NavMesh modifier */
|
||||
if ((ob->gameflag & OB_NAVMESH) && (finaldm->type == DM_TYPE_CDDM)) {
|
||||
|
@ -2696,7 +2696,7 @@ static void init_render_dm(DerivedMesh *dm, Render *re, ObjectRen *obr,
|
||||
#ifdef WITH_FREESTYLE
|
||||
index_mf_to_mpoly= dm->getTessFaceDataArray(dm, CD_ORIGINDEX);
|
||||
index_mp_to_orig= dm->getPolyDataArray(dm, CD_ORIGINDEX);
|
||||
ffa= dm->getPolyDataArray(dm, CD_FREESTYLE_FACE);
|
||||
ffa= CustomData_get_layer(&((Mesh *)ob->data)->pdata, CD_FREESTYLE_FACE);
|
||||
#endif
|
||||
|
||||
for (a=0; a<end; a++, mface++) {
|
||||
@ -3243,7 +3243,7 @@ static void add_volume(Render *re, ObjectRen *obr, Material *ma)
|
||||
}
|
||||
|
||||
#ifdef WITH_FREESTYLE
|
||||
static EdgeHash *make_freestyle_edge_mark_hash(DerivedMesh *dm)
|
||||
static EdgeHash *make_freestyle_edge_mark_hash(Mesh *me, DerivedMesh *dm)
|
||||
{
|
||||
EdgeHash *edge_hash= BLI_edgehash_new();
|
||||
FreestyleEdge *fed;
|
||||
@ -3254,7 +3254,7 @@ static EdgeHash *make_freestyle_edge_mark_hash(DerivedMesh *dm)
|
||||
medge = dm->getEdgeArray(dm);
|
||||
totedge = dm->getNumEdges(dm);
|
||||
index = dm->getEdgeDataArray(dm, CD_ORIGINDEX);
|
||||
fed = dm->getEdgeDataArray(dm, CD_FREESTYLE_EDGE);
|
||||
fed = CustomData_get_layer(&me->edata, CD_FREESTYLE_EDGE);
|
||||
if (fed) {
|
||||
if (!index) {
|
||||
for (a = 0; a < totedge; a++) {
|
||||
@ -3436,7 +3436,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
|
||||
EdgeHash *edge_hash;
|
||||
|
||||
/* create a hash table of Freestyle edge marks */
|
||||
edge_hash = make_freestyle_edge_mark_hash(dm);
|
||||
edge_hash = make_freestyle_edge_mark_hash(me, dm);
|
||||
#endif
|
||||
|
||||
/* store customdata names, because DerivedMesh is freed */
|
||||
@ -3478,7 +3478,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
|
||||
#ifdef WITH_FREESTYLE
|
||||
index_mf_to_mpoly= dm->getTessFaceDataArray(dm, CD_ORIGINDEX);
|
||||
index_mp_to_orig= dm->getPolyDataArray(dm, CD_ORIGINDEX);
|
||||
ffa= dm->getPolyDataArray(dm, CD_FREESTYLE_FACE);
|
||||
ffa= CustomData_get_layer(&((Mesh *)ob->data)->pdata, CD_FREESTYLE_FACE);
|
||||
#endif
|
||||
|
||||
for (a=0; a<end; a++, mface++) {
|
||||
|
Loading…
Reference in New Issue
Block a user