diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2013-02-10 14:17:59 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2013-02-10 14:17:59 +0400 |
commit | ac9ec06ec121589fedbfeaa10137140b45bfd668 (patch) | |
tree | ab08f9528136f0b8813593b78621f869d98d655e /source/blender/render | |
parent | 3c064f4553e4be988fe4fcec450b59b935fa3c80 (diff) | |
parent | 63af7068ad17f30a526ccb81fbe74253b064bc89 (diff) |
Merged changes in the trunk up to revision 54421.
Conflicts resolved:
release/datafiles/startup.blend
release/scripts/startup/bl_ui/properties_render.py
source/blender/SConscript
source/blender/blenloader/intern/readfile.c
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/intern/source/bake.c | 27 | ||||
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/imagetexture.c | 18 | ||||
-rw-r--r-- | source/blender/render/intern/source/pipeline.c | 28 | ||||
-rw-r--r-- | source/blender/render/intern/source/pixelblending.c | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/pixelshading.c | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/rayshade.c | 8 | ||||
-rw-r--r-- | source/blender/render/intern/source/renderdatabase.c | 8 | ||||
-rw-r--r-- | source/blender/render/intern/source/strand.c | 4 |
9 files changed, 71 insertions, 28 deletions
diff --git a/source/blender/render/intern/source/bake.c b/source/blender/render/intern/source/bake.c index d4451d570a4..cb6f9611bfd 100644 --- a/source/blender/render/intern/source/bake.c +++ b/source/blender/render/intern/source/bake.c @@ -734,8 +734,8 @@ static void bake_single_vertex(BakeShade *bs, VertRen *vert, float u, float v) } /* Bake all vertices of a face. Actually, this still works on a face-by-face - basis, and each vertex on each face is shaded. Vertex colors are a property - of loops, not vertices. */ + * basis, and each vertex on each face is shaded. Vertex colors are a property + * of loops, not vertices. */ static void shade_verts(BakeShade *bs) { VlakRen *vlr = bs->vlr; @@ -756,7 +756,7 @@ static void shade_verts(BakeShade *bs) zero_v3(bs->dyco); /* Shade each vertex of the face. u and v are barycentric coordinates; since - we're only interested in vertices, these will be 0 or 1. */ + * we're only interested in vertices, these will be 0 or 1. */ if ((vlr->flag & R_FACE_SPLIT) == 0) { /* Processing triangle face, whole quad, or first half of split quad. */ @@ -818,10 +818,13 @@ static void shade_tface(BakeShade *bs) BLI_lock_thread(LOCK_CUSTOM1); userdata = bs->ibuf->userdata; if (userdata == NULL) /* since the thread was locked, its possible another thread alloced the value */ - userdata = MEM_callocN(sizeof(BakeImBufuserData), "BakeMask"); + userdata = MEM_callocN(sizeof(BakeImBufuserData), "BakeImBufuserData"); - if (bs->use_mask) - userdata->mask_buffer = MEM_callocN(sizeof(char) * bs->rectx * bs->recty, "BakeMask"); + if (bs->use_mask) { + if (userdata->mask_buffer == NULL) { + userdata->mask_buffer = MEM_callocN(sizeof(char) * bs->rectx * bs->recty, "BakeMask"); + } + } if (bs->use_displacement_buffer) userdata->displacement_buffer = MEM_callocN(sizeof(float) * bs->rectx * bs->recty, "BakeDisp"); @@ -1069,12 +1072,14 @@ int RE_bake_shade_all_selected(Render *re, int type, Object *actob, short *do_up if (!ibuf) continue; - userdata = (BakeImBufuserData *) ibuf->userdata; - RE_bake_ibuf_filter(ibuf, userdata->mask_buffer, re->r.bake_filter); + userdata = (BakeImBufuserData *)ibuf->userdata; + if (userdata) { + RE_bake_ibuf_filter(ibuf, userdata->mask_buffer, re->r.bake_filter); - if (use_displacement_buffer) { - RE_bake_ibuf_normalize_displacement(ibuf, userdata->displacement_buffer, userdata->mask_buffer, - displacement_min, displacement_max); + if (use_displacement_buffer) { + RE_bake_ibuf_normalize_displacement(ibuf, userdata->displacement_buffer, userdata->mask_buffer, + displacement_min, displacement_max); + } } ibuf->userflags |= IB_BITMAPDIRTY; diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 9e9dff63c04..28065002773 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -3310,7 +3310,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) } /* origindex currently only used when baking to vertex colors */ - if(re->flag & R_BAKING && re->r.bake_flag & R_BAKE_VCOL) + if (re->flag & R_BAKING && re->r.bake_flag & R_BAKE_VCOL) need_origindex= 1; /* check autosmooth and displacement, we then have to skip only-verts optimize */ diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c index 0a427d57ebc..55dadc14989 100644 --- a/source/blender/render/intern/source/imagetexture.c +++ b/source/blender/render/intern/source/imagetexture.c @@ -224,8 +224,10 @@ int imagewrap(Tex *tex, Image *ima, ImBuf *ibuf, const float texvec[3], TexResul } /* keep this before interpolation [#29761] */ - if ((tex->imaflag & TEX_CALCALPHA) == 0) { - texres->talpha = TRUE; + if (tex->ima && (tex->ima->flag & IMA_IGNORE_ALPHA) == 0) { + if ((tex->imaflag & TEX_CALCALPHA) == 0) { + texres->talpha = TRUE; + } } /* interpolate */ @@ -1092,8 +1094,10 @@ static int imagewraposa_aniso(Tex *tex, Image *ima, ImBuf *ibuf, const float tex /* mipmap test */ image_mipmap_test(tex, ibuf); - if ((tex->imaflag & TEX_CALCALPHA) == 0) - texres->talpha = 1; + if (tex->ima && (tex->ima->flag & IMA_IGNORE_ALPHA) == 0) { + if ((tex->imaflag & TEX_CALCALPHA) == 0) + texres->talpha = 1; + } texr.talpha = texres->talpha; if (tex->imaflag & TEX_IMAROT) { @@ -1506,8 +1510,10 @@ int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, const float texvec[3], const /* mipmap test */ image_mipmap_test(tex, ibuf); - if ((tex->imaflag & TEX_CALCALPHA) == 0) { - texres->talpha = TRUE; + if (tex->ima && (tex->ima->flag & IMA_IGNORE_ALPHA) == 0) { + if ((tex->imaflag & TEX_CALCALPHA) == 0) { + texres->talpha = TRUE; + } } texr.talpha= texres->talpha; diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index d77ca10e0b2..73c3b1c9366 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -1371,6 +1371,19 @@ static int composite_needs_render(Scene *sce, int this_scene) return 0; } +static bool rlayer_node_uses_alpha(bNodeTree *ntree, bNode *node) +{ + bNodeSocket *sock; + + for (sock = node->outputs.first; sock; sock = sock->next) { + /* Weak! but how to make it better? */ + if (!strcmp(sock->name, "Alpha") && nodeCountSocketLinks(ntree, sock) > 0) + return true; + } + + return false; +} + static void tag_scenes_for_render(Render *re) { bNode *node; @@ -1388,6 +1401,21 @@ static void tag_scenes_for_render(Render *re) for (node = re->scene->nodetree->nodes.first; node; node = node->next) { if (node->type == CMP_NODE_R_LAYERS) { if (node->id) { + if (!MAIN_VERSION_ATLEAST(re->main, 265, 5)) { + if (rlayer_node_uses_alpha(re->scene->nodetree, node)) { + Scene *scene = (Scene*) node->id; + + if (scene->r.alphamode != R_ALPHAPREMUL) { + BKE_reportf(re->reports, RPT_WARNING, "Setting scene %s alpha mode to Premul\n", scene->id.name + 2); + + /* also print, so feedback is immediate */ + printf("2.66 versioning fix: setting scene %s alpha mode to Premul\n", scene->id.name + 2); + + scene->r.alphamode = R_ALPHAPREMUL; + } + } + } + if (node->id != (ID *)re->scene) node->id->flag |= LIB_DOIT; } diff --git a/source/blender/render/intern/source/pixelblending.c b/source/blender/render/intern/source/pixelblending.c index 21ff1151cfb..66fd2209881 100644 --- a/source/blender/render/intern/source/pixelblending.c +++ b/source/blender/render/intern/source/pixelblending.c @@ -120,7 +120,7 @@ void addalphaAddfacFloat(float dest[4], const float source[4], char addfac) else #endif dest[0] = c; - + c = (m * dest[1]) + source[1]; #ifdef RE_FLOAT_COLOR_CLIPPING if (c >= RE_FULL_COLOR_FLOAT) dest[1] = RE_FULL_COLOR_FLOAT; diff --git a/source/blender/render/intern/source/pixelshading.c b/source/blender/render/intern/source/pixelshading.c index 3420648cb52..8a023a2c009 100644 --- a/source/blender/render/intern/source/pixelshading.c +++ b/source/blender/render/intern/source/pixelshading.c @@ -286,7 +286,7 @@ int shadeHaloFloat(HaloRen *har, float col[4], int zz, /* fill in col */ float t, zn, radist, ringf=0.0f, linef=0.0f, alpha, si, co; int a; - + if (R.wrld.mode & WO_MIST) { if (har->type & HA_ONLYSKY) { /* stars but no mist */ diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index bef5902588c..fe23f31c6d7 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -433,14 +433,18 @@ void makeraytree(Render *re) * This is ONLY needed to kept a bogus behavior of SUN and HEMI lights */ INIT_MINMAX(min, max); RE_rayobject_merge_bb(re->raytree, min, max); + if (min[0] > max[0]) { /* empty raytree */ + zero_v3(min); + zero_v3(max); + } for (i=0; i<3; i++) { + /* TODO: explain why add top both min and max??? */ min[i] += 0.01f; max[i] += 0.01f; sub[i] = max[i]-min[i]; } - re->maxdist = dot_v3v3(sub, sub); - if (re->maxdist > 0.0f) re->maxdist= sqrt(re->maxdist); + re->maxdist = len_v3(sub); re->i.infostr= "Raytree finished"; re->stats_draw(re->sdh, &re->i); diff --git a/source/blender/render/intern/source/renderdatabase.c b/source/blender/render/intern/source/renderdatabase.c index b25f2f4201a..0a8af1c368b 100644 --- a/source/blender/render/intern/source/renderdatabase.c +++ b/source/blender/render/intern/source/renderdatabase.c @@ -361,8 +361,8 @@ int *RE_vlakren_get_origindex(ObjectRen *obr, VlakRen *vlak, int verify) int nr= vlak->index>>8; origindex= obr->vlaknodes[nr].origindex; - if(origindex==NULL) { - if(verify) + if (origindex==NULL) { + if (verify) origindex= obr->vlaknodes[nr].origindex= MEM_callocN(256*RE_VLAK_ORIGINDEX_ELEMS*sizeof(int), "origindex table"); else return NULL; @@ -440,7 +440,7 @@ VlakRen *RE_vlakren_copy(ObjectRen *obr, VlakRen *vlr) } origindex= RE_vlakren_get_origindex(obr, vlr, 0); - if(origindex) { + if (origindex) { origindex1= RE_vlakren_get_origindex(obr, vlr1, 1); /* Just an int, but memcpy for consistency. */ memcpy(origindex1, origindex, sizeof(int)*RE_VLAK_ORIGINDEX_ELEMS); @@ -791,7 +791,7 @@ void free_renderdata_vlaknodes(VlakTableNode *vlaknodes) MEM_freeN(vlaknodes[a].mtface); if (vlaknodes[a].mcol) MEM_freeN(vlaknodes[a].mcol); - if(vlaknodes[a].origindex) + if (vlaknodes[a].origindex) MEM_freeN(vlaknodes[a].origindex); if (vlaknodes[a].surfnor) MEM_freeN(vlaknodes[a].surfnor); diff --git a/source/blender/render/intern/source/strand.c b/source/blender/render/intern/source/strand.c index a37ffb1eb28..8b83ca4b6c3 100644 --- a/source/blender/render/intern/source/strand.c +++ b/source/blender/render/intern/source/strand.c @@ -676,14 +676,14 @@ static void strand_render(Render *re, StrandSegment *sseg, float winmat[4][4], S else { float hoco1[4], hoco2[4]; int a, obi, index; - + obi= sseg->obi - re->objectinstance; index= sseg->strand->index; projectvert(p1->co, winmat, hoco1); projectvert(p2->co, winmat, hoco2); - + for (a=0; a<totzspan; a++) { #if 0 /* render both strand and single pixel wire to counter aliasing */ |