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 /source/blender/bmesh
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!
Diffstat (limited to 'source/blender/bmesh')
-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);