Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-06-13 19:02:42 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-06-13 19:02:42 +0400
commit7d478ac0a7d5925d316371502ae642015bbfa7ae (patch)
treee513eb77238b9fefa21a79705e20fdb9655a04c3 /source/blender/render
parenta754423bd1e1ec092534abb0584197ce32403996 (diff)
Fix #35664: blender internal material index pass + ztransp + multiple materials
assigned to a mesh did not work correct.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/intern/source/zbuf.c17
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) {