[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42711] trunk/blender/source/blender/ modifiers/intern/MOD_weightvgproximity.c: Minor tweaking to WeightVGProximity modifier code ( not really usefull currently, but mandatory for other future changes?\226? \128?\166)
Bastien Montagne
montagne29 at wanadoo.fr
Sun Dec 18 22:46:38 CET 2011
Revision: 42711
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42711
Author: mont29
Date: 2011-12-18 21:46:26 +0000 (Sun, 18 Dec 2011)
Log Message:
-----------
Minor tweaking to WeightVGProximity modifier code (not really usefull currently, but mandatory for other future changes?\226?\128?\166)
Modified Paths:
--------------
trunk/blender/source/blender/modifiers/intern/MOD_weightvgproximity.c
Modified: trunk/blender/source/blender/modifiers/intern/MOD_weightvgproximity.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_weightvgproximity.c 2011-12-18 18:31:02 UTC (rev 42710)
+++ trunk/blender/source/blender/modifiers/intern/MOD_weightvgproximity.c 2011-12-18 21:46:26 UTC (rev 42711)
@@ -57,6 +57,32 @@
/* Util macro. */
#define OUT_OF_MEMORY() ((void)printf("WeightVGProximity: Out of memory.\n"))
+/* Benchmark macros */
+#if !defined(_WIN32) && 1
+
+#include <sys/time.h>
+
+#define BENCH_INIT \
+ double _t1, _t2; \
+ struct timeval _tstart, _tend; \
+
+#define BENCH_START \
+ gettimeofday ( &_tstart, NULL); \
+
+#define BENCH_END \
+ gettimeofday ( &_tend, NULL); \
+ _t1 = ( double ) _tstart.tv_sec + ( double ) _tstart.tv_usec/ ( 1000*1000 ); \
+ _t2 = ( double ) _tend.tv_sec + ( double ) _tend.tv_usec/ ( 1000*1000 ); \
+ printf("BENCH: %fs (real)\n", _t2-_t1);\
+
+#else
+
+#define BENCH_INIT
+#define BENCH_START
+#define BENCH_END
+
+#endif
+
/**
* Find nearest vertex and/or edge and/or face, for each vertex (adapted from shrinkwrap.c).
*/
@@ -449,9 +475,17 @@
MEM_freeN(tdw);
/* Get our vertex coordinates. */
- v_cos = MEM_mallocN(sizeof(float[3]) * numIdx, "WeightVGProximity Modifier, v_cos");
- for (i = 0; i < numIdx; i++)
- ret->getVertCo(ret, indices[i], v_cos[i]);
+ {
+ /* XXX In some situations, this code can be up to about 50 times more performant
+ * than simply using getVertCo for each affected vertex...
+ */
+ float (*tv_cos)[3] = MEM_mallocN(sizeof(float[3]) * numVerts, "WeightVGProximity Modifier, tv_cos");
+ v_cos = MEM_mallocN(sizeof(float[3]) * numIdx, "WeightVGProximity Modifier, v_cos");
+ ret->getVertCos(ret, tv_cos);
+ for (i = 0; i < numIdx; i++)
+ copy_v3_v3(v_cos[i], tv_cos[indices[i]]);
+ MEM_freeN(tv_cos);
+ }
/* Compute wanted distances. */
if (wmd->proximity_mode == MOD_WVG_PROXIMITY_OBJECT) {
More information about the Bf-blender-cvs
mailing list