diff options
Diffstat (limited to 'source/blender/editors/render/render_preview.c')
-rw-r--r-- | source/blender/editors/render/render_preview.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c index ae938c3fa30..1261ff43854 100644 --- a/source/blender/editors/render/render_preview.c +++ b/source/blender/editors/render/render_preview.c @@ -313,11 +313,24 @@ static void set_preview_layer(SceneLayer *scene_layer, char pr_type) lc->flag = COLLECTION_VISIBLE; } else { - lc->flag = 0; + lc->flag = COLLECTION_DISABLED; } } } +static World *preview_get_localized_world(ShaderPreview *sp, World *world) +{ + if (world == NULL) { + return NULL; + } + if (sp->worldcopy != NULL) { + return sp->worldcopy; + } + sp->worldcopy = localize_world(world); + BLI_addtail(&sp->pr_main->world, sp->worldcopy); + return sp->worldcopy; +} + /* call this with a pointer to initialize preview scene */ /* call this with NULL to restore assigned ID pointers in preview scene */ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_type, ShaderPreview *sp) @@ -329,7 +342,7 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty sce = preview_get_scene(pr_main); if (sce) { - SceneLayer *scene_layer = BKE_scene_layer_render_active(sce); + SceneLayer *scene_layer = BKE_scene_layer_from_scene_get(sce); /* this flag tells render to not execute depsgraph or ipos etc */ sce->r.scemode |= R_BUTS_PREVIEW; @@ -439,8 +452,9 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty } else { /* use current scene world to light sphere */ - if (mat->pr_type == MA_SPHERE_A) - sce->world = scene->world; + if (mat->pr_type == MA_SPHERE_A) { + sce->world = preview_get_localized_world(sp, scene->world); + } } if (sp->pr_method == PR_ICON_RENDER) { @@ -452,7 +466,7 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty /* same as above, use current scene world to light sphere */ if (BKE_scene_use_new_shading_nodes(scene)) - sce->world = scene->world; + sce->world = preview_get_localized_world(sp, scene->world); } } else { @@ -541,7 +555,7 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty if (!BKE_scene_use_new_shading_nodes(scene)) { if (la && la->type == LA_SUN && (la->sun_effect_type & LA_SUN_EFFECT_SKY)) { set_preview_layer(scene_layer, MA_ATMOS); - sce->world = scene->world; + sce->world = preview_get_localized_world(sp, scene->world); sce->camera = (Object *)BLI_findstring(&pr_main->object, "CameraAtmo", offsetof(ID, name) + 2); } else { @@ -1252,7 +1266,7 @@ void ED_preview_icon_render(Main *bmain, Scene *scene, ID *id, unsigned int *rec ip.bmain = bmain; ip.scene = scene; - ip.owner = id; + ip.owner = BKE_previewimg_id_ensure(id); ip.id = id; icon_preview_add_size(&ip, rect, sizex, sizey); |