forked from bartvdbraak/blender
Fix game engine crashing with subsurf modifier, only allow caching
of CCGSubsurf when computing ob/em->derivedFinal.
This commit is contained in:
parent
2430005cef
commit
3be3e84e48
@ -1622,7 +1622,7 @@ static void add_weight_mcol_dm(Object *ob, DerivedMesh *dm)
|
|||||||
static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos)[3],
|
static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos)[3],
|
||||||
DerivedMesh **deform_r, DerivedMesh **final_r,
|
DerivedMesh **deform_r, DerivedMesh **final_r,
|
||||||
int useRenderParams, int useDeform,
|
int useRenderParams, int useDeform,
|
||||||
int needMapping, CustomDataMask dataMask, int index)
|
int needMapping, CustomDataMask dataMask, int index, int useCache)
|
||||||
{
|
{
|
||||||
Mesh *me = ob->data;
|
Mesh *me = ob->data;
|
||||||
ModifierData *firstmd, *md;
|
ModifierData *firstmd, *md;
|
||||||
@ -1798,7 +1798,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
|
|||||||
if(!CustomData_has_layer(&dm->faceData, CD_ORIGSPACE))
|
if(!CustomData_has_layer(&dm->faceData, CD_ORIGSPACE))
|
||||||
DM_add_face_layer(dm, CD_ORIGSPACE, CD_DEFAULT, NULL);
|
DM_add_face_layer(dm, CD_ORIGSPACE, CD_DEFAULT, NULL);
|
||||||
|
|
||||||
ndm = mti->applyModifier(md, ob, dm, useRenderParams, !inputVertexCos);
|
ndm = mti->applyModifier(md, ob, dm, useRenderParams, useCache);
|
||||||
|
|
||||||
if(ndm) {
|
if(ndm) {
|
||||||
/* if the modifier returned a new dm, release the old one */
|
/* if the modifier returned a new dm, release the old one */
|
||||||
@ -2116,7 +2116,7 @@ static void mesh_build_data(Scene *scene, Object *ob, CustomDataMask dataMask)
|
|||||||
|
|
||||||
mesh_calc_modifiers(scene, ob, NULL, &ob->derivedDeform,
|
mesh_calc_modifiers(scene, ob, NULL, &ob->derivedDeform,
|
||||||
&ob->derivedFinal, 0, 1,
|
&ob->derivedFinal, 0, 1,
|
||||||
needMapping, dataMask, -1);
|
needMapping, dataMask, -1, 1);
|
||||||
|
|
||||||
INIT_MINMAX(min, max);
|
INIT_MINMAX(min, max);
|
||||||
|
|
||||||
@ -2129,7 +2129,6 @@ static void mesh_build_data(Scene *scene, Object *ob, CustomDataMask dataMask)
|
|||||||
ob->derivedFinal->needsFree = 0;
|
ob->derivedFinal->needsFree = 0;
|
||||||
ob->derivedDeform->needsFree = 0;
|
ob->derivedDeform->needsFree = 0;
|
||||||
ob->lastDataMask = dataMask;
|
ob->lastDataMask = dataMask;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void editmesh_build_data(Scene *scene, Object *obedit, EditMesh *em, CustomDataMask dataMask)
|
static void editmesh_build_data(Scene *scene, Object *obedit, EditMesh *em, CustomDataMask dataMask)
|
||||||
@ -2203,7 +2202,7 @@ DerivedMesh *mesh_create_derived_render(Scene *scene, Object *ob, CustomDataMask
|
|||||||
{
|
{
|
||||||
DerivedMesh *final;
|
DerivedMesh *final;
|
||||||
|
|
||||||
mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 1, 1, 0, dataMask, -1);
|
mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 1, 1, 0, dataMask, -1, 0);
|
||||||
|
|
||||||
return final;
|
return final;
|
||||||
}
|
}
|
||||||
@ -2212,7 +2211,7 @@ DerivedMesh *mesh_create_derived_index_render(Scene *scene, Object *ob, CustomDa
|
|||||||
{
|
{
|
||||||
DerivedMesh *final;
|
DerivedMesh *final;
|
||||||
|
|
||||||
mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 1, 1, 0, dataMask, index);
|
mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 1, 1, 0, dataMask, index, 0);
|
||||||
|
|
||||||
return final;
|
return final;
|
||||||
}
|
}
|
||||||
@ -2221,7 +2220,7 @@ DerivedMesh *mesh_create_derived_view(Scene *scene, Object *ob, CustomDataMask d
|
|||||||
{
|
{
|
||||||
DerivedMesh *final;
|
DerivedMesh *final;
|
||||||
|
|
||||||
mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 0, 1, 0, dataMask, -1);
|
mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 0, 1, 0, dataMask, -1, 0);
|
||||||
|
|
||||||
return final;
|
return final;
|
||||||
}
|
}
|
||||||
@ -2231,7 +2230,7 @@ DerivedMesh *mesh_create_derived_no_deform(Scene *scene, Object *ob, float (*ver
|
|||||||
{
|
{
|
||||||
DerivedMesh *final;
|
DerivedMesh *final;
|
||||||
|
|
||||||
mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 0, 0, 0, dataMask, -1);
|
mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 0, 0, 0, dataMask, -1, 0);
|
||||||
|
|
||||||
return final;
|
return final;
|
||||||
}
|
}
|
||||||
@ -2241,7 +2240,7 @@ DerivedMesh *mesh_create_derived_no_virtual(Scene *scene, Object *ob, float (*ve
|
|||||||
{
|
{
|
||||||
DerivedMesh *final;
|
DerivedMesh *final;
|
||||||
|
|
||||||
mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 0, -1, 0, dataMask, -1);
|
mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 0, -1, 0, dataMask, -1, 0);
|
||||||
|
|
||||||
return final;
|
return final;
|
||||||
}
|
}
|
||||||
@ -2252,7 +2251,7 @@ DerivedMesh *mesh_create_derived_no_deform_render(Scene *scene, Object *ob,
|
|||||||
{
|
{
|
||||||
DerivedMesh *final;
|
DerivedMesh *final;
|
||||||
|
|
||||||
mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 1, 0, 0, dataMask, -1);
|
mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 1, 0, 0, dataMask, -1, 0);
|
||||||
|
|
||||||
return final;
|
return final;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user