diff options
-rw-r--r-- | source/blender/blenkernel/BKE_DerivedMesh.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 5 | ||||
-rw-r--r-- | source/blender/src/drawobject.c | 10 |
3 files changed, 15 insertions, 1 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index bd0e2bd3a98..7a44f9de9f9 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -184,6 +184,7 @@ DerivedMesh *mesh_create_derived_render(struct Object *ob); DerivedMesh *mesh_create_derived_no_deform(struct Object *ob, float (*vertCos)[3]); DerivedMesh *mesh_create_derived_no_deform_render(struct Object *ob, float (*vertCos)[3]); +DerivedMesh *editmesh_get_derived_base(void); DerivedMesh *editmesh_get_derived_cage(int *needsFree_r); DerivedMesh *editmesh_get_derived_cage_and_final(DerivedMesh **final_r, int *cageNeedsFree_r, int *finalNeedsFree_r); diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 8bf5df95257..15f6b9fce9b 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -1704,3 +1704,8 @@ DerivedMesh *editmesh_get_derived_cage(int *needsFree_r) return G.editMesh->derivedCage; } + +DerivedMesh *editmesh_get_derived_base(void) +{ + return getEditMeshDerivedMesh(G.editMesh, NULL); +} diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c index 6e3401d0582..b0942f08d72 100644 --- a/source/blender/src/drawobject.c +++ b/source/blender/src/drawobject.c @@ -1856,7 +1856,15 @@ static void draw_mesh_object(Base *base, int dt) if(G.obedit && ob->data==G.obedit->data) { int cageNeedsFree, finalNeedsFree; - DerivedMesh *finalDM, *cageDM = editmesh_get_derived_cage_and_final(&finalDM, &cageNeedsFree, &finalNeedsFree); + DerivedMesh *finalDM, *cageDM; + + if (G.obedit!=ob) { + finalDM = cageDM = editmesh_get_derived_base(); + cageNeedsFree = 0; + finalNeedsFree = 1; + } else { + cageDM = editmesh_get_derived_cage_and_final(&finalDM, &cageNeedsFree, &finalNeedsFree); + } if(dt>OB_WIRE) init_gl_materials(ob); // no transp in editmode, the fancy draw over goes bad then draw_em_fancy(ob, G.editMesh, cageDM, finalDM, dt); |