diff options
author | Lukas Toenne <lukas.toenne@googlemail.com> | 2013-09-03 22:59:52 +0400 |
---|---|---|
committer | Lukas Toenne <lukas.toenne@googlemail.com> | 2013-09-03 22:59:52 +0400 |
commit | f9e43424feb17168dea8b5ffe9845c359558281a (patch) | |
tree | cff5fefdf7a8217b2998bd27fc5f4773a2eb9de0 /source/blender/render | |
parent | 2663d3833d62e048470f0e9dcd45cbfe02222542 (diff) |
Fix #36194, Halo material on Layer 2 produces flares on layer 1. Halo flares were simply rendered on the first available halo-enabled layer. Now use the flare layers correctly.
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/intern/source/rendercore.c | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c index fa3cf1cef87..e85ed058262 100644 --- a/source/blender/render/intern/source/rendercore.c +++ b/source/blender/render/intern/source/rendercore.c @@ -1957,34 +1957,36 @@ void add_halo_flare(Render *re) RenderResult *rr= re->result; RenderLayer *rl; HaloRen *har; - int a, mode, do_draw = FALSE; + int a, mode; /* for now, we get the first renderlayer in list with halos set */ - for (rl= rr->layers.first; rl; rl= rl->next) - if (rl->layflag & SCE_LAY_HALO) - break; - - if (rl==NULL || rl->rectf==NULL) - return; - - mode= R.r.mode; - R.r.mode &= ~R_PANORAMA; - - project_renderdata(&R, projectverto, 0, 0, 0); - - for (a=0; a<R.tothalo; a++) { - har= R.sortedhalos[a]; + for (rl= rr->layers.first; rl; rl= rl->next) { + int do_draw = FALSE; + + if ((rl->layflag & SCE_LAY_HALO) == 0) + continue; + if (rl->rectf==NULL) + continue; - if (har->flarec) { - do_draw = TRUE; - renderflare(rr, rl->rectf, har); + mode= R.r.mode; + R.r.mode &= ~R_PANORAMA; + + project_renderdata(&R, projectverto, 0, 0, 0); + + for (a=0; a<R.tothalo; a++) { + har= R.sortedhalos[a]; + + if (har->flarec && (har->lay & rl->lay)) { + do_draw = TRUE; + renderflare(rr, rl->rectf, har); + } + } + + if (do_draw) { + /* weak... the display callback wants an active renderlayer pointer... */ + rr->renlay= rl; + re->display_draw(re->ddh, rr, NULL); } - } - - if (do_draw) { - /* weak... the display callback wants an active renderlayer pointer... */ - rr->renlay= rl; - re->display_draw(re->ddh, rr, NULL); } R.r.mode= mode; |