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:
-rw-r--r--source/blender/blenkernel/BKE_particle.h1
-rw-r--r--source/blender/blenkernel/intern/particle.c2
-rw-r--r--source/blender/blenkernel/intern/particle_distribute.c2
-rw-r--r--source/blender/blenkernel/intern/particle_system.c25
4 files changed, 18 insertions, 12 deletions
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index 71805160927..4c6b0cc0dac 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -350,6 +350,7 @@ void psys_get_dupli_path_transform(struct ParticleSimulationData *sim, struct Pa
struct ParticleCacheKey *cache, float mat[4][4], float *scale);
void psys_thread_context_init(struct ParticleThreadContext *ctx, struct ParticleSimulationData *sim);
+void psys_thread_context_free(struct ParticleThreadContext *ctx);
void psys_tasks_create(struct ParticleThreadContext *ctx, int totpart, struct ParticleTask **r_tasks, int *r_numtasks);
void psys_tasks_free(struct ParticleTask *tasks, int numtasks);
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index aa62b7778c9..847cae9f0fc 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -2587,6 +2587,8 @@ void psys_cache_child_paths(ParticleSimulationData *sim, float cfra, int editupd
psys_tasks_free(tasks_parent, numtasks_parent);
psys_tasks_free(tasks_child, numtasks_child);
+
+ psys_thread_context_free(&ctx);
}
/* figure out incremental rotations along path starting from unit quat */
diff --git a/source/blender/blenkernel/intern/particle_distribute.c b/source/blender/blenkernel/intern/particle_distribute.c
index 90338e96945..7a422abae47 100644
--- a/source/blender/blenkernel/intern/particle_distribute.c
+++ b/source/blender/blenkernel/intern/particle_distribute.c
@@ -1140,6 +1140,8 @@ static void distribute_particles_on_dm(ParticleSimulationData *sim, int from)
ctx.dm->release(ctx.dm);
psys_tasks_free(tasks, numtasks);
+
+ psys_thread_context_free(&ctx);
}
/* ready for future use, to emit particles without geometry */
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 93eb273fc00..6e7e341e1cc 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -471,13 +471,24 @@ void psys_tasks_create(ParticleThreadContext *ctx, int totpart, ParticleTask **r
void psys_tasks_free(ParticleTask *tasks, int numtasks)
{
- ParticleThreadContext *ctx;
int i;
if (numtasks == 0)
return;
- ctx = tasks[0].ctx;
+ /* threads */
+ for (i = 0; i < numtasks; ++i) {
+ if (tasks[i].rng)
+ BLI_rng_free(tasks[i].rng);
+ if (tasks[i].rng_path)
+ BLI_rng_free(tasks[i].rng_path);
+ }
+
+ MEM_freeN(tasks);
+}
+
+void psys_thread_context_free(ParticleThreadContext *ctx)
+{
/* path caching */
if (ctx->vg_length)
MEM_freeN(ctx->vg_length);
@@ -506,16 +517,6 @@ void psys_tasks_free(ParticleTask *tasks, int numtasks)
if (ctx->seams) MEM_freeN(ctx->seams);
//if (ctx->vertpart) MEM_freeN(ctx->vertpart);
BLI_kdtree_free(ctx->tree);
-
- /* threads */
- for (i = 0; i < numtasks; ++i) {
- if (tasks[i].rng)
- BLI_rng_free(tasks[i].rng);
- if (tasks[i].rng_path)
- BLI_rng_free(tasks[i].rng_path);
- }
-
- MEM_freeN(tasks);
}
static void initialize_particle_texture(ParticleSimulationData *sim, ParticleData *pa, int p)