diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-12-30 17:37:25 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-12-30 17:37:25 +0300 |
commit | 57cd505d3f29b83bea74f4132455f00b248d5808 (patch) | |
tree | eef3278dc77873f421201d806ad2411095f7e3a1 /source/blender/render | |
parent | a4913896b8f42be9bdde6ebc320a4955578a8f9e (diff) |
bake is now modal like render and updates the image view while baking.
it also has an exec function which doesnt update (like render too)
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/extern/include/RE_shader_ext.h | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/rendercore.c | 11 |
2 files changed, 11 insertions, 2 deletions
diff --git a/source/blender/render/extern/include/RE_shader_ext.h b/source/blender/render/extern/include/RE_shader_ext.h index 2615be1440a..28d88e1f8b4 100644 --- a/source/blender/render/extern/include/RE_shader_ext.h +++ b/source/blender/render/extern/include/RE_shader_ext.h @@ -197,7 +197,7 @@ struct Image; struct Object; void RE_shade_external(struct Render *re, struct ShadeInput *shi, struct ShadeResult *shr); -int RE_bake_shade_all_selected(struct Render *re, int type, struct Object *actob); +int RE_bake_shade_all_selected(struct Render *re, int type, struct Object *actob, short *do_update); struct Image *RE_bake_shade_get_image(void); #endif /* RE_SHADER_EXT_H */ diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c index cae6c640f8b..c55632b36dc 100644 --- a/source/blender/render/intern/source/rendercore.c +++ b/source/blender/render/intern/source/rendercore.c @@ -1988,6 +1988,8 @@ typedef struct BakeShade { char *rect_mask; /* bake pixel mask */ float dxco[3], dyco[3]; + + short *do_update; } BakeShade; /* bake uses a char mask to know what has been baked */ @@ -2587,6 +2589,11 @@ static void *do_bake_thread(void *bs_v) /* fast threadsafe break test */ if(R.test_break(R.tbh)) break; + + /* access is not threadsafe but since its just true/false probably ok + * only used for interactive baking */ + if(bs->do_update) + *bs->do_update= TRUE; } bs->ready= 1; @@ -2596,7 +2603,7 @@ static void *do_bake_thread(void *bs_v) /* using object selection tags, the faces with UV maps get baked */ /* render should have been setup */ /* returns 0 if nothing was handled */ -int RE_bake_shade_all_selected(Render *re, int type, Object *actob) +int RE_bake_shade_all_selected(Render *re, int type, Object *actob, short *do_update) { BakeShade handles[BLENDER_MAX_THREADS]; ListBase threads; @@ -2645,6 +2652,8 @@ int RE_bake_shade_all_selected(Render *re, int type, Object *actob) handles[a].zspan= MEM_callocN(sizeof(ZSpan), "zspan for bake"); handles[a].usemask = usemask; + + handles[a].do_update = do_update; /* use to tell the view to update */ BLI_insert_thread(&threads, &handles[a]); } |