[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