diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-06-13 19:02:42 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-06-13 19:02:42 +0400 |
commit | 7d478ac0a7d5925d316371502ae642015bbfa7ae (patch) | |
tree | e513eb77238b9fefa21a79705e20fdb9655a04c3 /source/blender | |
parent | a754423bd1e1ec092534abb0584197ce32403996 (diff) |
Fix #35664: blender internal material index pass + ztransp + multiple materials
assigned to a mesh did not work correct.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/render/intern/source/zbuf.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c index 3b4ad7c91af..b974022790d 100644 --- a/source/blender/render/intern/source/zbuf.c +++ b/source/blender/render/intern/source/zbuf.c @@ -4148,15 +4148,24 @@ unsigned short *zbuffer_transp_shade(RenderPart *pa, RenderLayer *rl, float *pas } if (addpassflag & SCE_PASS_INDEXMA) { ObjectRen *obr = R.objectinstance[zrow[totface-1].obi].obr; + int p = zrow[totface-1].p; Material *mat = NULL; if (zrow[totface-1].segment == -1) { - if (obr->vlaknodes) - mat = obr->vlaknodes->vlak->mat; + int facenr = (p - 1) & RE_QUAD_MASK; + VlakRen *vlr = NULL; + + if (facenr >= 0 && facenr < obr->totvlak) + vlr = RE_findOrAddVlak(obr, facenr); + + if (vlr) + mat = vlr->mat; } else { - if (obr->strandbuf) - mat = obr->strandbuf->ma; + StrandRen *strand = RE_findOrAddStrand(obr, p - 1); + + if (strand) + mat = strand->buffer->ma; } if (mat) { |