diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-02-13 17:06:41 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-02-13 17:06:41 +0300 |
commit | b330804ff3eca68cdd65e26d551d1829fae5ff36 (patch) | |
tree | 7501de6265ae963e064a580e6339539740a9008b /source/blender/editors | |
parent | 9e2ec6c86a9ea2e387fe5e523df06c0a462819b7 (diff) | |
parent | 9fb1f9c5cdccc14f65ba2047e5656b360142aa43 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/include/ED_object.h | 2 | ||||
-rw-r--r-- | source/blender/editors/object/object_edit.c | 30 | ||||
-rw-r--r-- | source/blender/editors/render/render_preview.c | 23 |
3 files changed, 42 insertions, 13 deletions
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index 94ee228f4f8..757a463f171 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -126,6 +126,8 @@ void ED_object_toggle_modes(struct bContext *C, eObjectMode mode); #define EM_WAITCURSOR 4 #define EM_DO_UNDO 8 #define EM_IGNORE_LAYER 16 +void ED_object_editmode_exit_ex( + struct bContext *C, struct WorkSpace *workspace, struct Scene *scene, struct Object *obedit, int flag); void ED_object_editmode_exit(struct bContext *C, int flag); void ED_object_editmode_enter(struct bContext *C, int flag); bool ED_object_editmode_load(struct Object *obedit); diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index a74af68ca7d..03c497bcef0 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -260,18 +260,20 @@ bool ED_object_editmode_load(Object *obedit) return ED_object_editmode_load_ex(G.main, obedit, false); } -void ED_object_editmode_exit(bContext *C, int flag) +/** + * \param C: Can be NULL, only if #EM_DO_UNDO isn't set. + * \param flag: + * - Only in exceptional cases should #EM_DO_UNDO NOT be in the flag. + * - If #EM_FREEDATA isn't in the flag, use ED_object_editmode_load directly. + */ +void ED_object_editmode_exit_ex(bContext *C, WorkSpace *workspace, Scene *scene, Object *obedit, int flag) { - /* Note! only in exceptional cases should 'EM_DO_UNDO' NOT be in the flag */ - /* Note! if 'EM_FREEDATA' isn't in the flag, use ED_object_editmode_load directly */ - WorkSpace *workspace = CTX_wm_workspace(C); - Scene *scene = CTX_data_scene(C); - Object *obedit = CTX_data_edit_object(C); + BLI_assert(C || !(flag & EM_DO_UNDO)); const bool freedata = (flag & EM_FREEDATA) != 0; if (flag & EM_WAITCURSOR) waitcursor(1); - if (ED_object_editmode_load_ex(CTX_data_main(C), obedit, freedata) == false) { + if (ED_object_editmode_load_ex(G.main, obedit, freedata) == false) { /* in rare cases (background mode) its possible active object * is flagged for editmode, without 'obedit' being set [#35489] */ workspace->object_mode &= ~OB_MODE_EDIT; @@ -303,7 +305,12 @@ void ED_object_editmode_exit(bContext *C, int flag) if (flag & EM_DO_UNDO) ED_undo_push(C, "Editmode"); - WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene); + if (C != NULL) { + WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene); + } + else { + WM_main_add_notifier(NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene); + } workspace->object_mode &= ~OB_MODE_EDIT; } @@ -314,6 +321,13 @@ void ED_object_editmode_exit(bContext *C, int flag) DEG_id_tag_update(&scene->id, 0); } +void ED_object_editmode_exit(bContext *C, int flag) +{ + WorkSpace *workspace = CTX_wm_workspace(C); + Scene *scene = CTX_data_scene(C); + Object *obedit = CTX_data_edit_object(C); + ED_object_editmode_exit_ex(C, workspace, scene, obedit, flag); +} void ED_object_editmode_enter(bContext *C, int flag) { diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c index 2e3091268a9..c76a6aa175a 100644 --- a/source/blender/editors/render/render_preview.c +++ b/source/blender/editors/render/render_preview.c @@ -455,9 +455,18 @@ 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) { + if (mat->pr_type == MA_SPHERE_A && sp->pr_method == PR_BUTS_RENDER) { + /* Use current scene world to light sphere. */ sce->world = preview_get_localized_world(sp, scene->world); } + else if (sce->world) { + /* Use a default world color. Using the current + * scene world can be slow if it has big textures. */ + sce->world->use_nodes = false; + sce->world->horr = 0.5f; + sce->world->horg = 0.5f; + sce->world->horb = 0.5f; + } } if (sp->pr_method == PR_ICON_RENDER) { @@ -466,10 +475,6 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty } else { set_preview_layer(view_layer, MA_SPHERE_A); - - /* same as above, use current scene world to light sphere */ - if (BKE_scene_use_new_shading_nodes(scene)) - sce->world = preview_get_localized_world(sp, scene->world); } } else { @@ -569,6 +574,14 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty } else { set_preview_layer(view_layer, MA_LAMP); + + if (sce->world) { + /* Only use lighting from the lamp. */ + sce->world->use_nodes = false; + sce->world->horr = 0.0f; + sce->world->horg = 0.0f; + sce->world->horb = 0.0f; + } } for (Base *base = view_layer->object_bases.first; base; base = base->next) { |