diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-04-15 14:28:32 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-04-15 14:28:32 +0400 |
commit | 9a85013692322f8a821b8228ad552f84d2a215e9 (patch) | |
tree | 666bb54fa093429d65b6b0322e8058c03f5fe223 /source/blender/windowmanager/intern/wm_jobs.c | |
parent | 2b018673509fe7a38a6332fae00bd605335bd286 (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.c | 12 |
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; |