2.5
Added WM Jobs manager - WM can manage threaded jobs for you; just provide a couple of components to get it work: - customdata, free callback for it - timer step, notifier code - start callback, update callback - Once started, each job runs an own timer, and will for every time step check necessary updates, or close the job when ready. - No drawing happens in jobs, that's for notifiers! - Every job stores an owner pointer, and based on this owner it will prevent multiple jobs to enter the stack. Instead it will re-use a running job, signal it to stop and allow caller to re-initialize it even. - Check new wm_jobs.c for more explanation. Jobs API is still under construction. Fun: BLI_addtail(&wm->jobs, steve); :) Put Node shader previews back using wmJobs - Preview calculating is now fully threaded (1 thread still) - Thanks to new event system + notifiers, you can see previews update even while dragging sliders! - Currently it only starts when you change a node setting. Warning: the thread render shares Node data, so don't delete nodes while it renders! This topic is on the todo to make safe. Also: - bug in region initialize (do_versions) showed channel list in node editor wrong. - flagged the channel list 'hidden' now, it was really in the way! This is for later to work on anyway. - recoded Render API callbacks so it gets handlers passed on, no globals to use anymore, remember? - previewrender code gets now so much nicer! Will remove a lot of stuff from code soon.
This commit is contained in:
@@ -36,9 +36,13 @@ struct IDProperty;
|
||||
struct wmEvent;
|
||||
struct wmEventHandler;
|
||||
struct wmGesture;
|
||||
struct wmJob;
|
||||
struct wmNotifier;
|
||||
struct rcti;
|
||||
struct PointerRNA;
|
||||
|
||||
typedef struct wmJob wmJob;
|
||||
|
||||
/* general API */
|
||||
void WM_setprefsize (int stax, int stay, int sizx, int sizy);
|
||||
|
||||
@@ -168,5 +172,18 @@ void wmOrtho2 (float x1, float x2, float y1, float y2);
|
||||
void WM_set_framebuffer_index_color(int index);
|
||||
int WM_framebuffer_to_index(unsigned int col);
|
||||
|
||||
/* threaded Jobs Manager */
|
||||
|
||||
struct wmJob *WM_jobs_get(struct wmWindowManager *wm, struct wmWindow *win, void *owner);
|
||||
|
||||
void WM_jobs_customdata(struct wmJob *, void *customdata, void (*free)(void *));
|
||||
void WM_jobs_timer(struct wmJob *, double timestep, unsigned int note);
|
||||
void WM_jobs_callbacks(struct wmJob *,
|
||||
void (*startjob)(void *, short *, short *),
|
||||
void (*listener)(struct wmJob *, struct wmNotifier *),
|
||||
void (*update)(void *));
|
||||
|
||||
void WM_jobs_start(struct wmJob *);
|
||||
|
||||
#endif /* WM_API_H */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user