Revision: 43619
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43619
Author:   campbellbarton
Date:     2012-01-22 21:12:18 +0000 (Sun, 22 Jan 2012)
Log Message:
-----------
disable re-tesselation for modifiers that use bmesh, array/bevel/edge split - 
were tesselating 2 times and didnt need to.
also comment array modifier from flushing selection flags.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h
    branches/bmesh/blender/source/blender/blenkernel/BKE_tessmesh.h
    branches/bmesh/blender/source/blender/blenkernel/intern/editderivedmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
    branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_array.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_bevel.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_edgesplit.c

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h        
2012-01-22 20:25:25 UTC (rev 43618)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h        
2012-01-22 21:12:18 UTC (rev 43619)
@@ -69,7 +69,8 @@
 /* useful for OrcoDM creation for curves with constructive modifiers */
 DerivedMesh *CDDM_from_curve_customDB(struct Object *ob, struct ListBase 
*dispbase);
 
-struct BMEditMesh *CDDM_To_BMesh(struct Object *ob, struct DerivedMesh *dm, 
struct BMEditMesh *existing);
+struct BMEditMesh *CDDM_To_BMesh(struct Object *ob, struct DerivedMesh *dm,
+                                 struct BMEditMesh *existing, int 
do_tesselate);
 
 
 /* Copies the given DerivedMesh with verts, faces & edges stored as

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_tessmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_tessmesh.h     
2012-01-22 20:25:25 UTC (rev 43618)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_tessmesh.h     
2012-01-22 21:12:18 UTC (rev 43619)
@@ -67,7 +67,7 @@
 #define BMESH_EM_UNDO_RECALC_TESSFACE_WORKAROUND
 
 void BMEdit_RecalcTesselation(BMEditMesh *tm);
-BMEditMesh *BMEdit_Create(BMesh *bm);
+BMEditMesh *BMEdit_Create(BMesh *bm, int do_tesselate);
 BMEditMesh *BMEdit_Copy(BMEditMesh *tm);
 void BMEdit_Free(BMEditMesh *em);
 void BMEdit_UpdateLinkedCustomData(BMEditMesh *em);

Modified: 
branches/bmesh/blender/source/blender/blenkernel/intern/editderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedmesh.c   
2012-01-22 20:25:25 UTC (rev 43618)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedmesh.c   
2012-01-22 21:12:18 UTC (rev 43619)
@@ -70,14 +70,15 @@
 extern GLubyte stipple_quarttone[128]; /* glutil.c, bad level data */
 
 
-BMEditMesh *BMEdit_Create(BMesh *bm)
+BMEditMesh *BMEdit_Create(BMesh *bm, int do_tesselate)
 {
        BMEditMesh *tm = MEM_callocN(sizeof(BMEditMesh), __func__);
 
        tm->bm = bm;
+       if (do_tesselate) {
+               BMEdit_RecalcTesselation(tm);
+       }
 
-       BMEdit_RecalcTesselation(tm);
-
        return tm;
 }
 

Modified: 
branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c   
2012-01-22 20:25:25 UTC (rev 43618)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c   
2012-01-22 21:12:18 UTC (rev 43619)
@@ -103,7 +103,7 @@
 
 /*converts a cddm to a BMEditMesh.  if existing is non-NULL, the
   new geometry will be put in there.*/
-BMEditMesh *CDDM_To_BMesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing)
+BMEditMesh *CDDM_To_BMesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing, 
int do_tesselate)
 {
        int allocsize[4] = {512, 512, 2048, 512};
        BMesh *bm, bmold; /*bmold is for storing old customdata layout*/
@@ -205,8 +205,14 @@
        BLI_array_free(verts);
        BLI_array_free(edges);
 
-       if (!em) em = BMEdit_Create(bm);
-       else BMEdit_RecalcTesselation(em);
+       if (!em) {
+               em = BMEdit_Create(bm, do_tesselate);
+       }
+       else {
+               if (do_tesselate) {
+                       BMEdit_RecalcTesselation(em);
+               }
+       }
 
        return em;
 }

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c     
2012-01-22 20:25:25 UTC (rev 43618)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c     
2012-01-22 21:12:18 UTC (rev 43619)
@@ -374,7 +374,7 @@
        /*switch multires data out of tangent space*/
        if (CustomData_has_layer(&bm->ldata, CD_MDISPS)) {
                Object *ob = bm->ob;
-               BMEditMesh *em = BMEdit_Create(bm);
+               BMEditMesh *em = BMEdit_Create(bm, FALSE);
                DerivedMesh *dm = CDDM_from_BMEditMesh(em, NULL, TRUE, FALSE);
                MDisps *mdisps;
                BMFace *f;

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c     
2012-01-22 20:25:25 UTC (rev 43618)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c     
2012-01-22 21:12:18 UTC (rev 43619)
@@ -310,7 +310,7 @@
                MEM_freeN(me->edit_btmesh);
        }
 
-       me->edit_btmesh = BMEdit_Create(bm);
+       me->edit_btmesh = BMEdit_Create(bm, TRUE);
        me->edit_btmesh->selectmode= me->edit_btmesh->bm->selectmode= 
ts->selectmode;
        me->edit_btmesh->me = me;
        me->edit_btmesh->ob = ob;
@@ -589,7 +589,7 @@
        bm = BM_Make_Mesh(ob, allocsize);
        BMO_CallOpf(bm, "mesh_to_bmesh mesh=%p object=%p set_shapekey=%i", me, 
ob, 0);
 
-       em2 = BMEdit_Create(bm);
+       em2 = BMEdit_Create(bm, TRUE);
        *em = *em2;
        
        em->selectmode = me->selectmode;

Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_array.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_array.c  
2012-01-22 20:25:25 UTC (rev 43618)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_array.c  
2012-01-22 21:12:18 UTC (rev 43619)
@@ -208,7 +208,7 @@
                                                                                
  int UNUSED(initFlags))
 {
        DerivedMesh *cddm = dm; //copying shouldn't be necassary here, as all 
modifiers return CDDM's
-       BMEditMesh *em = CDDM_To_BMesh(ob, cddm, NULL);
+       BMEditMesh *em = CDDM_To_BMesh(ob, cddm, NULL, FALSE);
        BMOperator op, oldop, weldop;
        int i, j, indexLen;
        /* offset matrix */
@@ -385,10 +385,9 @@
        BMO_Finish_Op(em->bm, &weldop);
 
        /* Bump the stack level back down to match the adjustment up above */
-       bmesh_end_edit(em->bm, 0);
        BMO_pop(em->bm);
 
-       BMEdit_RecalcTesselation(em);
+       BLI_assert(em->looptris == NULL);
        cddm = CDDM_from_BMEditMesh(em, NULL, FALSE, FALSE);
 
        BMEdit_Free(em);

Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_bevel.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_bevel.c  
2012-01-22 20:25:25 UTC (rev 43618)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_bevel.c  
2012-01-22 21:12:18 UTC (rev 43619)
@@ -123,7 +123,7 @@
                cddm = CDDM_copy(dm, 0);
        } else cddm = dm;
 
-       em = CDDM_To_BMesh(ob, dm, NULL);
+       em = CDDM_To_BMesh(ob, dm, NULL, FALSE);
        bm = em->bm;
 
        BM_Compute_Normals(bm);
@@ -152,13 +152,13 @@
        BMO_CallOpf(bm, "bevel geom=%fe percent=%f use_even=%i use_dist=%i",
                    EDGE_MARK, bmd->value, (bmd->flags & BME_BEVEL_EVEN)!=0, 
(bmd->flags & BME_BEVEL_DIST)!=0);
        BMO_pop(bm);
-       BMEdit_RecalcTesselation(em);
 
        if (cddm != dm) {
                cddm->needsFree = 1;
                cddm->release(cddm);
        }
 
+       BLI_assert(em->looptris == NULL);
        cddm = CDDM_from_BMEditMesh(em, NULL, TRUE, FALSE);
        BMEdit_Free(em);
        MEM_freeN(em);

Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_edgesplit.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_edgesplit.c      
2012-01-22 20:25:25 UTC (rev 43618)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_edgesplit.c      
2012-01-22 21:12:18 UTC (rev 43619)
@@ -71,7 +71,7 @@
                cddm = CDDM_copy(dm, 0);
        } else cddm = dm;
        
-       em = CDDM_To_BMesh(ob, dm, NULL);
+       em = CDDM_To_BMesh(ob, dm, NULL, FALSE);
        bm = em->bm;
 
        BM_Compute_Normals(bm); 
@@ -101,13 +101,13 @@
        BMO_CallOpf(bm, "edgesplit edges=%fe", EDGE_MARK);
        
        BMO_pop(bm);
-       BMEdit_RecalcTesselation(em);
        
        if (cddm != dm) {
                cddm->needsFree = 1;
                cddm->release(cddm);
        }
-       
+
+       BLI_assert(em->looptris == NULL);
        cddm = CDDM_from_BMEditMesh(em, NULL, TRUE, FALSE);
        BMEdit_Free(em);
        MEM_freeN(em);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to