Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2013-06-11 13:14:39 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2013-06-11 13:14:39 +0400
commite895c8302ea0f89a8a2040157d0f36e6ea978864 (patch)
treecc8b864e018eb78892a0596f209603c0f05762f8
parente969bb207d125e4641ea91a7b8d3e9a6fe131deb (diff)
Use OpenMP threads in bm_loop_interp_mdisps
Gives approx 2x speedup on my laptop on such operations as mesh subdivision in edit mode. Desktops with fancier CPUs could benefit even more. Thanks Campbell for review!
-rw-r--r--source/blender/bmesh/intern/bmesh_interp.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/source/blender/bmesh/intern/bmesh_interp.c b/source/blender/bmesh/intern/bmesh_interp.c
index bf7bfc1123c..9c85a4fc4e5 100644
--- a/source/blender/bmesh/intern/bmesh_interp.c
+++ b/source/blender/bmesh/intern/bmesh_interp.c
@@ -432,10 +432,8 @@ static void bm_loop_flip_disp(float source_axis_x[3], float source_axis_y[3],
static void bm_loop_interp_mdisps(BMesh *bm, BMLoop *target, BMFace *source)
{
MDisps *mdisps;
- BMLoop *l_iter;
- BMLoop *l_first;
- float x, y, d, v1[3], v2[3], v3[3], v4[3] = {0.0f, 0.0f, 0.0f}, e1[3], e2[3];
- int ix, iy, res;
+ float d, v1[3], v2[3], v3[3], v4[3] = {0.0f, 0.0f, 0.0f}, e1[3], e2[3];
+ int ix, res;
float axis_x[3], axis_y[3];
/* ignore 2-edged faces */
@@ -467,10 +465,15 @@ static void bm_loop_interp_mdisps(BMesh *bm, BMLoop *target, BMFace *source)
res = (int)sqrt(mdisps->totdisp);
d = 1.0f / (float)(res - 1);
- for (x = 0.0f, ix = 0; ix < res; x += d, ix++) {
+ #pragma omp parallel for if(res > 3)
+ for (ix = 0; ix < res; ix++) {
+ float x = d * ix, y;
+ int iy;
for (y = 0.0f, iy = 0; iy < res; y += d, iy++) {
+ BMLoop *l_iter;
+ BMLoop *l_first;
float co1[3], co2[3], co[3];
-
+
copy_v3_v3(co1, e1);
mul_v3_fl(co1, y);