diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 1e09dc43f61..5985049ea56 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -1454,6 +1454,12 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos } #endif /* WITH_GAMEENGINE */ + /* Re-tesselation is necessary to push render data (uvs, textures, colors) + from loops and polys onto the tessfaces. This may be currently be redundant + in cases where the render mode doesn't use these inputs, but ideally + eventually tesselation would happen on-demand, and this is one of the primary + places it would be needed. */ + finaldm->recalcTesselation(finaldm); finaldm->calcNormals(finaldm); *final_r = finaldm; diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index c890ca9d01f..bf055592e3d 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -1644,8 +1644,7 @@ static CDDerivedMesh *cdDM_create(const char *desc) dm->getTessFaceDataArray = DM_get_tessface_data_layer; dm->calcNormals = CDDM_calc_normals; - //doesn't work yet for all cases - //dm->recalcTesselation = CDDM_recalc_tesselation; + dm->recalcTesselation = CDDM_recalc_tesselation; dm->getVertCos = cdDM_getVertCos; dm->getVertCo = cdDM_getVertCo; diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 9e82bae9195..5f23b547e98 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -2758,6 +2758,11 @@ static struct PBVH *ccgDM_getPBVH(Object *ob, DerivedMesh *dm) return ccgdm->pbvh; } +static void ccgDM_recalcTesselection(DerivedMesh *UNUSED(dm)) +{ + /* Nothing to do: CCG handles creating its own tessfaces */ +} + static void ccgDM_calcNormals(DerivedMesh *UNUSED(dm)) { /* Nothing to do: CCG calculates normals during drawing */ @@ -2853,6 +2858,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, ccgdm->dm.getTessFaceData = DM_get_face_data; ccgdm->dm.calcNormals = ccgDM_calcNormals; + ccgdm->dm.recalcTesselation = ccgDM_recalcTesselection; ccgdm->dm.getVertCos = cgdm_getVertCos; ccgdm->dm.foreachMappedVert = cgdm_foreachMappedVert;