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:
authorCampbell Barton <ideasman42@gmail.com>2013-01-18 10:26:06 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-01-18 10:26:06 +0400
commitee0eb394c9c4cbe9466ac76a35431288e4f80aa9 (patch)
treef9f962f573db9d28323acdfd237aea960f5f1407 /source/blender/modifiers/intern/MOD_build.c
parent1a131171cb208d1f45d62c287fbe4fc5c3bbe42b (diff)
use openmp sections for felling origindex arrays
Diffstat (limited to 'source/blender/modifiers/intern/MOD_build.c')
-rw-r--r--source/blender/modifiers/intern/MOD_build.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/source/blender/modifiers/intern/MOD_build.c b/source/blender/modifiers/intern/MOD_build.c
index 2105a6efd21..c5a756733f5 100644
--- a/source/blender/modifiers/intern/MOD_build.c
+++ b/source/blender/modifiers/intern/MOD_build.c
@@ -37,6 +37,7 @@
#include "BLI_utildefines.h"
#include "BLI_rand.h"
+#include "BLI_math_vector.h"
#include "BLI_ghash.h"
#include "DNA_scene_types.h"
@@ -104,12 +105,19 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob),
MVert *mvert_src = dm->getVertArray(dm);
- vertMap = MEM_callocN(sizeof(*vertMap) * numVert_src, "build modifier vertMap");
- for (i = 0; i < numVert_src; i++) vertMap[i] = i;
- edgeMap = MEM_callocN(sizeof(*edgeMap) * numEdge_src, "build modifier edgeMap");
- for (i = 0; i < numEdge_src; i++) edgeMap[i] = i;
- faceMap = MEM_callocN(sizeof(*faceMap) * numPoly_src, "build modifier faceMap");
- for (i = 0; i < numPoly_src; i++) faceMap[i] = i;
+ vertMap = MEM_mallocN(sizeof(*vertMap) * numVert_src, "build modifier vertMap");
+ edgeMap = MEM_mallocN(sizeof(*edgeMap) * numEdge_src, "build modifier edgeMap");
+ faceMap = MEM_mallocN(sizeof(*faceMap) * numPoly_src, "build modifier faceMap");
+
+#pragma omp parallel sections if (numVert_src + numEdge_src + numPoly_src >= DM_OMP_LIMIT)
+ {
+#pragma omp section
+ { range_vn_i(vertMap, numVert_src, 0); }
+#pragma omp section
+ { range_vn_i(edgeMap, numEdge_src, 0); }
+#pragma omp section
+ { range_vn_i(faceMap, numPoly_src, 0); }
+ }
frac = (BKE_scene_frame_get(md->scene) - bmd->start) / bmd->length;
CLAMP(frac, 0.0f, 1.0f);