diff options
Diffstat (limited to 'source/blender/render/intern/source')
4 files changed, 22 insertions, 16 deletions
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 55146162f25..e6f054583b1 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -2930,8 +2930,7 @@ static struct edgesort *make_mesh_edge_lookup(DerivedMesh *dm, int *totedgesort) /* make sorted table with edges and face indices in it */ for (a= totface, mf= mface; a>0; a--, mf++) { - if (mf->v4) totedge+=4; - else if (mf->v3) totedge+=3; + totedge += mf->v4 ? 4 : 3; } if (totedge==0) @@ -2946,8 +2945,9 @@ static struct edgesort *make_mesh_edge_lookup(DerivedMesh *dm, int *totedgesort) to_edgesort(ed++, 2, 3, mf->v3, mf->v4, a); to_edgesort(ed++, 3, 0, mf->v4, mf->v1, a); } - else if (mf->v3) + else { to_edgesort(ed++, 2, 3, mf->v3, mf->v1, a); + } } qsort(edsort, totedge, sizeof(struct edgesort), vergedgesort); diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c index 888f1330373..54f142184e1 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -575,7 +575,7 @@ int RE_engine_render(Render *re, int do_all) lay &= non_excluded_lay; } - BKE_scene_update_for_newframe(re->eval_ctx, re->main, re->scene, lay); + BKE_scene_update_for_newframe_ex(re->eval_ctx, re->main, re->scene, lay, true); render_update_anim_renderdata(re, &re->scene->r); } diff --git a/source/blender/render/intern/source/occlusion.c b/source/blender/render/intern/source/occlusion.c index f0fe5d054f0..0c6341fe9e5 100644 --- a/source/blender/render/intern/source/occlusion.c +++ b/source/blender/render/intern/source/occlusion.c @@ -45,6 +45,7 @@ #include "BLF_translation.h" +#include "BKE_node.h" #include "BKE_scene.h" @@ -194,14 +195,19 @@ static void occ_shade(ShadeSample *ssamp, ObjectInstanceRen *obi, VlakRen *vlr, } /* init material vars */ - /* note, keep this synced with render_types.h */ - memcpy(&shi->r, &shi->mat->r, 23 * sizeof(float)); - shi->har = shi->mat->har; - + shade_input_init_material(shi); + /* render */ shade_input_set_shade_texco(shi); - shade_material_loop(shi, shr); /* todo: nodes */ - + + if (shi->mat->nodetree && shi->mat->use_nodes) { + ntreeShaderExecTree(shi->mat->nodetree, shi, shr); + shi->mat = vlr->mat; /* shi->mat is being set in nodetree */ + } + else { + shade_material_loop(shi, shr); + } + copy_v3_v3(rad, shr->combined); } diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 1b7ce9a3f2d..32bd67cb1f2 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -1728,7 +1728,7 @@ static int composite_needs_render(Scene *sce, int this_scene) if ((sce->r.scemode & R_DOCOMP) == 0) return 1; for (node = ntree->nodes.first; node; node = node->next) { - if (node->type == CMP_NODE_R_LAYERS) + if (node->type == CMP_NODE_R_LAYERS && (node->flag & NODE_MUTED) == 0) if (this_scene == 0 || node->id == NULL || node->id == &sce->id) return 1; } @@ -1867,7 +1867,7 @@ static void tag_scenes_for_render(Render *re) /* check for render-layers nodes using other scenes, we tag them LIB_DOIT */ for (node = re->scene->nodetree->nodes.first; node; node = node->next) { node->flag &= ~NODE_TEST; - if (node->type == CMP_NODE_R_LAYERS) { + if (node->type == CMP_NODE_R_LAYERS && (node->flag & NODE_MUTED) == 0) { if (node->id) { if (!MAIN_VERSION_ATLEAST(re->main, 265, 5)) { if (rlayer_node_uses_alpha(re->scene->nodetree, node)) { @@ -1916,7 +1916,7 @@ static void ntree_render_scenes(Render *re) /* now foreach render-result node tagged we do a full render */ /* results are stored in a way compisitor will find it */ for (node = re->scene->nodetree->nodes.first; node; node = node->next) { - if (node->type == CMP_NODE_R_LAYERS) { + if (node->type == CMP_NODE_R_LAYERS && (node->flag & NODE_MUTED) == 0) { if (node->id && node->id != (ID *)re->scene) { if (node->flag & NODE_TEST) { Scene *scene = (Scene *)node->id; @@ -2202,7 +2202,7 @@ void RE_MergeFullSample(Render *re, Main *bmain, Scene *sce, bNodeTree *ntree) #endif for (node = ntree->nodes.first; node; node = node->next) { - if (node->type == CMP_NODE_R_LAYERS) { + if (node->type == CMP_NODE_R_LAYERS && (node->flag & NODE_MUTED) == 0) { Scene *nodescene = (Scene *)node->id; if (nodescene == NULL) nodescene = sce; @@ -2497,7 +2497,7 @@ static bool check_valid_compositing_camera(Scene *scene, Object *camera_override bNode *node = scene->nodetree->nodes.first; while (node) { - if (node->type == CMP_NODE_R_LAYERS) { + if (node->type == CMP_NODE_R_LAYERS && (node->flag & NODE_MUTED) == 0) { Scene *sce = node->id ? (Scene *)node->id : scene; if (!sce->camera && !BKE_scene_camera_find(sce)) { @@ -2645,7 +2645,7 @@ bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList * } #ifdef WITH_FREESTYLE - if ((scene->r.mode & R_EDGE_FRS) && (!BKE_scene_use_new_shading_nodes(scene))) { + if (scene->r.mode & R_EDGE_FRS) { BKE_report(reports, RPT_ERROR, "Panoramic camera not supported in Freestyle"); return 0; } |