[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