Revision: 30629 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30629 Author: nazgul Date: 2010-07-22 13:27:54 +0200 (Thu, 22 Jul 2010)
Log Message: ----------- Fix #22661: Multires/Sculpt Segfult - Show error message in multires modifier if there is no MDISPS layer - Sculpt on basis mesh if there is no the same layer Modified Paths: -------------- trunk/blender/source/blender/editors/sculpt_paint/sculpt.c trunk/blender/source/blender/modifiers/intern/MOD_multires.c Modified: trunk/blender/source/blender/editors/sculpt_paint/sculpt.c =================================================================== --- trunk/blender/source/blender/editors/sculpt_paint/sculpt.c 2010-07-22 11:21:21 UTC (rev 30628) +++ trunk/blender/source/blender/editors/sculpt_paint/sculpt.c 2010-07-22 11:27:54 UTC (rev 30629) @@ -112,8 +112,14 @@ it's the last modifier on the stack and it is not on the first level */ struct MultiresModifierData *sculpt_multires_active(Scene *scene, Object *ob) { + Mesh *me= (Mesh*)ob->data; ModifierData *md, *nmd; - + + if(!CustomData_get_layer(&me->fdata, CD_MDISPS)) { + /* multires can't work without displacement layer */ + return NULL; + } + for(md= modifiers_getVirtualModifierList(ob); md; md= md->next) { if(md->type == eModifierType_Multires) { MultiresModifierData *mmd= (MultiresModifierData*)md; Modified: trunk/blender/source/blender/modifiers/intern/MOD_multires.c =================================================================== --- trunk/blender/source/blender/modifiers/intern/MOD_multires.c 2010-07-22 11:21:21 UTC (rev 30628) +++ trunk/blender/source/blender/modifiers/intern/MOD_multires.c 2010-07-22 11:27:54 UTC (rev 30629) @@ -38,6 +38,8 @@ #include "BKE_paint.h" #include "BKE_particle.h" +#include "DNA_mesh_types.h" + static void initData(ModifierData *md) { MultiresModifierData *mmd = (MultiresModifierData*)md; @@ -66,7 +68,16 @@ int sculpting= (ob->mode & OB_MODE_SCULPT) && ss; MultiresModifierData *mmd = (MultiresModifierData*)md; DerivedMesh *result; + Mesh *me= (Mesh*)ob->data; + if(mmd->totlvl) { + if(!CustomData_get_layer(&me->fdata, CD_MDISPS)) { + /* multires can't work without displacement layer */ + modifier_setError(md, "Modifier needs mesh with displacement data."); + return dm; + } + } + result = multires_dm_create_from_derived(mmd, 0, dm, ob, useRenderParams, isFinalCalc); if(result == dm) _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs