[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52911] trunk/blender/source/blender: make EDBM_index_arrays's stay in memory, blender was allocating an array and filling it for verts/edges/ faces on every redraw.

Campbell Barton ideasman42 at gmail.com
Wed Dec 12 07:53:40 CET 2012


Revision: 52911
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52911
Author:   campbellbarton
Date:     2012-12-12 06:53:39 +0000 (Wed, 12 Dec 2012)
Log Message:
-----------
make EDBM_index_arrays's stay in memory, blender was allocating an array and filling it for verts/edges/faces on every redraw.

this may introduce bugs which I didn't catch, but they are very easy to identify in a debug build which has asserts to ensure the arrays are valid before use.

in my own test drawing ~98,304 quads - this gave an overall ~16% drawing speedup.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_tessmesh.h
    trunk/blender/source/blender/editors/include/ED_mesh.h
    trunk/blender/source/blender/editors/mesh/editface.c
    trunk/blender/source/blender/editors/mesh/editmesh_add.c
    trunk/blender/source/blender/editors/mesh/editmesh_knife.c
    trunk/blender/source/blender/editors/mesh/editmesh_rip.c
    trunk/blender/source/blender/editors/mesh/editmesh_select.c
    trunk/blender/source/blender/editors/mesh/editmesh_slide.c
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/blender/editors/mesh/editmesh_utils.c
    trunk/blender/source/blender/editors/mesh/mesh_navmesh.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c
    trunk/blender/source/blender/editors/space_view3d/view3d_iterators.c
    trunk/blender/source/blender/editors/space_view3d/view3d_snap.c
    trunk/blender/source/blender/editors/transform/transform_snap.c
    trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
    trunk/blender/source/blender/editors/uvedit/uvedit_smart_stitch.c
    trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c

Modified: trunk/blender/source/blender/blenkernel/BKE_tessmesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_tessmesh.h	2012-12-12 06:51:06 UTC (rev 52910)
+++ trunk/blender/source/blender/blenkernel/BKE_tessmesh.h	2012-12-12 06:53:39 UTC (rev 52911)
@@ -80,7 +80,6 @@
 
 	/*temp variables for x-mirror editing*/
 	int mirror_cdlayer; /* -1 is invalid */
-	int mirr_free_arrays;
 } BMEditMesh;
 
 void BMEdit_RecalcTessellation(BMEditMesh *em);

Modified: trunk/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_mesh.h	2012-12-12 06:51:06 UTC (rev 52910)
+++ trunk/blender/source/blender/editors/include/ED_mesh.h	2012-12-12 06:53:39 UTC (rev 52911)
@@ -89,8 +89,12 @@
 void EDBM_mesh_free(struct BMEditMesh *em);
 void EDBM_mesh_load(struct Object *ob);
 
+void           EDBM_index_arrays_ensure(struct BMEditMesh *em, const char htype);
 void           EDBM_index_arrays_init(struct BMEditMesh *em, const char htype);
 void           EDBM_index_arrays_free(struct BMEditMesh *em);
+#ifdef DEBUG
+int            EDBM_index_arrays_check(struct BMEditMesh *em);
+#endif
 struct BMVert *EDBM_vert_at_index(struct BMEditMesh *em, int index);
 struct BMEdge *EDBM_edge_at_index(struct BMEditMesh *em, int index);
 struct BMFace *EDBM_face_at_index(struct BMEditMesh *em, int index);
@@ -115,7 +119,8 @@
 void EDBM_mesh_hide(struct BMEditMesh *em, int swap);
 void EDBM_mesh_reveal(struct BMEditMesh *em);
 
-void EDBM_update_generic(struct bContext *C, struct BMEditMesh *em, const short do_tessface);
+void EDBM_update_generic(struct bContext *C, struct BMEditMesh *em,
+                         const short do_tessface, const short is_destructive);
 
 struct UvElementMap *EDBM_uv_element_map_create(struct BMEditMesh *em, int selected, int doIslands);
 void                 EDBM_uv_element_map_free(struct UvElementMap *vmap);
@@ -126,7 +131,7 @@
 
 void              EDBM_uv_vert_map_free(struct UvVertMap *vmap);
 struct UvMapVert *EDBM_uv_vert_map_at_index(struct UvVertMap *vmap, unsigned int v);
-struct UvVertMap *EDBM_uv_vert_map_create(struct BMEditMesh *em, int selected, int do_face_idx_array, const float limit[2]);
+struct UvVertMap *EDBM_uv_vert_map_create(struct BMEditMesh *em, int selected, const float limit[2]);
 
 void EDBM_flag_enable_all(struct BMEditMesh *em, const char hflag);
 void EDBM_flag_disable_all(struct BMEditMesh *em, const char hflag);

Modified: trunk/blender/source/blender/editors/mesh/editface.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editface.c	2012-12-12 06:51:06 UTC (rev 52910)
+++ trunk/blender/source/blender/editors/mesh/editface.c	2012-12-12 06:53:39 UTC (rev 52911)
@@ -852,7 +852,7 @@
 
 	if (em) {
 		if (skip_em_vert_array_init == FALSE) {
-			EDBM_index_arrays_init(em, BM_VERT);
+			EDBM_index_arrays_ensure(em, BM_VERT);
 		}
 	}
 
@@ -888,11 +888,6 @@
 			last = a;
 		}
 	}
-	if (em) {
-		if (skip_em_vert_array_init == FALSE) {
-			EDBM_index_arrays_free(em);
-		}
-	}
 
 	MEM_freeN(topo_pairs);
 	topo_pairs = NULL;

Modified: trunk/blender/source/blender/editors/mesh/editmesh_add.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_add.c	2012-12-12 06:51:06 UTC (rev 52910)
+++ trunk/blender/source/blender/editors/mesh/editmesh_add.c	2012-12-12 06:53:39 UTC (rev 52911)
@@ -90,7 +90,7 @@
 	EDBM_selectmode_flush_ex(em, SCE_SELECT_VERTEX);
 
 	/* only recalc editmode tessface if we are staying in editmode */
-	EDBM_update_generic(C, em, !exit_editmode);
+	EDBM_update_generic(C, em, !exit_editmode, TRUE);
 
 	/* userdef */
 	if (exit_editmode) {

Modified: trunk/blender/source/blender/editors/mesh/editmesh_knife.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_knife.c	2012-12-12 06:51:06 UTC (rev 52910)
+++ trunk/blender/source/blender/editors/mesh/editmesh_knife.c	2012-12-12 06:53:39 UTC (rev 52911)
@@ -2841,7 +2841,7 @@
 #endif
 
 	EDBM_mesh_normals_update(kcd->em);
-	EDBM_update_generic(C, kcd->em, TRUE);
+	EDBM_update_generic(C, kcd->em, TRUE, TRUE);
 }
 
 /* copied from paint_image.c */

Modified: trunk/blender/source/blender/editors/mesh/editmesh_rip.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_rip.c	2012-12-12 06:51:06 UTC (rev 52910)
+++ trunk/blender/source/blender/editors/mesh/editmesh_rip.c	2012-12-12 06:53:39 UTC (rev 52911)
@@ -1044,7 +1044,7 @@
 		return OPERATOR_CANCELLED;
 	}
 
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, TRUE);
 
 	return OPERATOR_FINISHED;
 }

Modified: trunk/blender/source/blender/editors/mesh/editmesh_select.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_select.c	2012-12-12 06:51:06 UTC (rev 52910)
+++ trunk/blender/source/blender/editors/mesh/editmesh_select.c	2012-12-12 06:53:39 UTC (rev 52911)
@@ -725,7 +725,7 @@
 		return OPERATOR_CANCELLED;
 	}
 
-	EDBM_update_generic(C, em, FALSE);
+	EDBM_update_generic(C, em, FALSE, FALSE);
 
 	/* we succeeded */
 	return OPERATOR_FINISHED;
@@ -767,7 +767,7 @@
 		return OPERATOR_CANCELLED;
 	}
 
-	EDBM_update_generic(C, em, FALSE);
+	EDBM_update_generic(C, em, FALSE, FALSE);
 
 	/* we succeeded */
 	return OPERATOR_FINISHED;
@@ -812,7 +812,7 @@
 
 	EDBM_selectmode_flush(em);
 
-	EDBM_update_generic(C, em, FALSE);
+	EDBM_update_generic(C, em, FALSE, FALSE);
 
 	/* we succeeded */
 	return OPERATOR_FINISHED;
@@ -1487,7 +1487,7 @@
 				break;
 		}
 		
-		EDBM_update_generic(C, em, FALSE);
+		EDBM_update_generic(C, em, FALSE, FALSE);
 
 		return TRUE;
 	}
@@ -1678,7 +1678,7 @@
 
 		BM_active_face_set(em->bm, f_dst);
 
-		EDBM_update_generic(C, em, FALSE);
+		EDBM_update_generic(C, em, FALSE, FALSE);
 
 		return TRUE;
 	}
@@ -2635,7 +2635,7 @@
 		return OPERATOR_CANCELLED;
 	}
 
-	EDBM_update_generic(C, em, FALSE);
+	EDBM_update_generic(C, em, FALSE, FALSE);
 
 	return OPERATOR_FINISHED;
 }

Modified: trunk/blender/source/blender/editors/mesh/editmesh_slide.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_slide.c	2012-12-12 06:51:06 UTC (rev 52910)
+++ trunk/blender/source/blender/editors/mesh/editmesh_slide.c	2012-12-12 06:53:39 UTC (rev 52911)
@@ -264,7 +264,7 @@
 	EDBM_selectmode_flush(em);
 	
 	/* NC_GEOM | ND_DATA & Retess */
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, FALSE);
 	
 	ED_region_tag_redraw(vso->active_region);
 }
@@ -752,7 +752,7 @@
 
 	if (do_update) {
 		/* Update Geometry */
-		EDBM_update_generic(C, em, TRUE);
+		EDBM_update_generic(C, em, TRUE, FALSE);
 	}
 
 	return OPERATOR_FINISHED;

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2012-12-12 06:51:06 UTC (rev 52910)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2012-12-12 06:53:39 UTC (rev 52911)
@@ -112,7 +112,7 @@
 	                   RNA_boolean_get(op->ptr, "quadtri"), TRUE, FALSE,
 	                   RNA_int_get(op->ptr, "seed"));
 
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, TRUE);
 
 	return OPERATOR_FINISHED;
 }
@@ -181,7 +181,7 @@
 	}
 	EDBM_selectmode_flush(em);
 
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, TRUE);
 
 	return OPERATOR_FINISHED;
 }
@@ -463,7 +463,7 @@
 	
 	EDBM_mesh_normals_update(em);
 
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, TRUE);
 
 	return OPERATOR_FINISHED;
 }
@@ -585,7 +585,7 @@
 	 * done.*/
 	EDBM_mesh_normals_update(em);
 
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, TRUE);
 	
 	return OPERATOR_FINISHED;
 }
@@ -678,7 +678,7 @@
 
 	edbm_extrude_discrete_faces(em, op, BM_ELEM_SELECT, nor);
 	
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, TRUE);
 	
 	return OPERATOR_FINISHED;
 }
@@ -936,7 +936,7 @@
 	 * done. */
 	EDBM_mesh_normals_update(vc.em);
 
-	EDBM_update_generic(C, vc.em, TRUE);
+	EDBM_update_generic(C, vc.em, TRUE, TRUE);
 
 	return OPERATOR_FINISHED;
 }
@@ -1001,7 +1001,7 @@
 
 	EDBM_flag_disable_all(em, BM_ELEM_SELECT);
 
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, TRUE);
 	
 	return OPERATOR_FINISHED;
 }
@@ -1034,7 +1034,7 @@
 	if (!EDBM_op_callf(em, op, "collapse edges=%he", BM_ELEM_SELECT))
 		return OPERATOR_CANCELLED;
 
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, TRUE);
 
 	return OPERATOR_FINISHED;
 }
@@ -1062,7 +1062,7 @@
 	if (!EDBM_op_callf(em, op, "dissolve_edge_loop edges=%he", BM_ELEM_SELECT))
 		return OPERATOR_CANCELLED;
 
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, TRUE);
 
 	return OPERATOR_FINISHED;
 }
@@ -1121,7 +1121,7 @@
 		return OPERATOR_CANCELLED;
 	}
 
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, TRUE);
 	
 	return OPERATOR_FINISHED;
 }
@@ -1176,7 +1176,7 @@
 	}
 
 	ED_uvedit_live_unwrap(scene, obedit);
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, FALSE);
 
 	return OPERATOR_FINISHED;
 }
@@ -1230,7 +1230,7 @@
 		}
 	}
 
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, FALSE);
 
 	return OPERATOR_FINISHED;
 }
@@ -1272,7 +1272,7 @@
 	else {
 		EDBM_selectmode_flush(em);  /* so newly created edges get the selection state from the vertex */
 
-		EDBM_update_generic(C, em, TRUE);
+		EDBM_update_generic(C, em, TRUE, TRUE);
 
 		return len ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
 	}
@@ -1310,7 +1310,7 @@
 		return OPERATOR_CANCELLED;
 	}
 	
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, TRUE);
 
 	return len ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
 }
@@ -1349,7 +1349,7 @@
 		return OPERATOR_CANCELLED;
 	}
 
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, TRUE);
 	
 	return OPERATOR_FINISHED;
 }
@@ -1388,7 +1388,7 @@
 	if (!EDBM_op_callf(em, op, "reverse_faces faces=%hf", BM_ELEM_SELECT))
 		return OPERATOR_CANCELLED;
 	
-	EDBM_update_generic(C, em, TRUE);
+	EDBM_update_generic(C, em, TRUE, FALSE);
 
 	return OPERATOR_FINISHED;
 }
@@ -1469,7 +1469,7 @@
 		return OPERATOR_CANCELLED;
 	}
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list