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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2010-04-15 14:28:32 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2010-04-15 14:28:32 +0400
commit9a85013692322f8a821b8228ad552f84d2a215e9 (patch)
tree666bb54fa093429d65b6b0322e8058c03f5fe223 /source/blender/windowmanager/intern/wm_jobs.c
parent2b018673509fe7a38a6332fae00bd605335bd286 (diff)
Merge various small changes from render branch:
* Division by zero fix for TNT SVD code. * Sound fix, in case ffmpeg decode fails, don't use the samples. * Fix for incorrect bounds of transformed objects in new raytracing code. * Gave memory arena's a name used for allocations for easier memory usage debugging. * Dupligroup no_draw option was using layers but not restrict view/render setting. (not a bugfix exactly but would do display list context switching while drawing for no reason). * Fix objects instanced on hair particles not giving consistent results when the object is transformed. * New math functions: madd_v4_v4fl, len_squared_v3v3, interp_v4_v4v4v4, mul_v4_m4v4, SH and form factor functions, box_minmax_bounds_m4. * mul_m4_m4m4 and mul_m3_m3m3 now accept the same pointers for multiple arguments. * endjob callback for WM jobs system. * Geometry node uv/color layer now has search list/autocomplete. * Various small buildsystem tweaks, not strictly needed yet in trunk.
Diffstat (limited to 'source/blender/windowmanager/intern/wm_jobs.c')
-rw-r--r--source/blender/windowmanager/intern/wm_jobs.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/source/blender/windowmanager/intern/wm_jobs.c b/source/blender/windowmanager/intern/wm_jobs.c
index 343b1f68c7f..30c0c9a7aec 100644
--- a/source/blender/windowmanager/intern/wm_jobs.c
+++ b/source/blender/windowmanager/intern/wm_jobs.c
@@ -95,6 +95,8 @@ struct wmJob {
void (*update)(void *);
/* free entire customdata, doesn't run in thread */
void (*free)(void *);
+ /* gets called when job is stopped, not in thread */
+ void (*endjob)(void *);
/* running jobs each have own timer */
double timestep;
@@ -179,11 +181,13 @@ void WM_jobs_timer(wmJob *steve, double timestep, unsigned int note, unsigned in
void WM_jobs_callbacks(wmJob *steve,
void (*startjob)(void *, short *, short *),
void (*initjob)(void *),
- void (*update)(void *))
+ void (*update)(void *),
+ void (*endjob)(void *))
{
steve->startjob= startjob;
steve->initjob= initjob;
steve->update= update;
+ steve->endjob= endjob;
}
static void *do_job_thread(void *job_v)
@@ -266,6 +270,9 @@ static void wm_jobs_kill_job(wmWindowManager *wm, wmJob *steve)
/* signal job to end */
steve->stop= 1;
BLI_end_threads(&steve->threads);
+
+ if(steve->endjob)
+ steve->endjob(steve->run_customdata);
}
if(steve->wt)
@@ -351,6 +358,9 @@ void wm_jobs_timer(const bContext *C, wmWindowManager *wm, wmTimer *wt)
}
if(steve->ready) {
+ if(steve->endjob)
+ steve->endjob(steve->run_customdata);
+
/* free own data */
steve->run_free(steve->run_customdata);
steve->run_customdata= NULL;