diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-04-18 12:51:20 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-04-18 17:35:38 +0300 |
commit | 15850a8740ed95afdc5779e224bf40f7540a7d62 (patch) | |
tree | af4b6f85d6ff7bb3a857106ed5397ed5c3190e03 /source | |
parent | 34dbe7ff33a3f565772ac6f0d60bbf955e07983c (diff) |
Workbench: don't change to workbench drawtype for files saved in 2.8.
Assume files saved in 2.8 were intended for Eevee and set them to material
viewport shading. In Eevee this is equal to rendered draw mode, in Cycles
this will draw with Eevee. This way Eevee demo files still show something
interesting when opened.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenloader/intern/versioning_280.c | 6 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 5 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_header.c | 6 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_space.c | 35 |
4 files changed, 48 insertions, 4 deletions
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c index b3cd1a6a1b7..490344d30fa 100644 --- a/source/blender/blenloader/intern/versioning_280.c +++ b/source/blender/blenloader/intern/versioning_280.c @@ -934,6 +934,12 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main) View3D *v3d = (View3D *)sl; v3d->drawtype_solid = OB_LIGHTING_STUDIO; v3d->drawtype_wireframe = OB_LIGHTING_STUDIO; + + /* Assume (demo) files written with 2.8 want to show + * Eevee renders in the viewport. */ + if (MAIN_VERSION_ATLEAST(main, 280, 0)) { + v3d->drawtype = OB_MATERIAL; + } } } } diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index a147aed308c..2ab661aa5dd 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -915,6 +915,11 @@ static void drw_engines_enable_from_engine(RenderEngineType *engine_type, int dr case OB_TEXTURE: break; + case OB_MATERIAL: + engine_type = RE_engines_find("BLENDER_EEVEE"); + use_drw_engine(engine_type->draw_engine); + break; + default: case OB_RENDER: /* TODO layers */ diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 1f47f44f2f6..563ff188f0d 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -303,6 +303,12 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) /* other buttons: */ UI_block_emboss_set(block, UI_EMBOSS); + /* Draw type */ + uiItemR(layout, &v3dptr, "viewport_shade", UI_ITEM_R_ICON_ONLY, "", ICON_NONE); + if (v3d->drawtype == OB_SOLID) { + uiItemR(layout, &v3dptr, "viewport_shade_solid", 0, "", ICON_NONE); + } + row = uiLayoutRow(layout, true); uiItemR(row, &v3dptr, "pivot_point", UI_ITEM_R_ICON_ONLY, "", ICON_NONE); if (!ob || ELEM(ob->mode, OB_MODE_OBJECT, OB_MODE_POSE, OB_MODE_WEIGHT_PAINT)) { diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 601a8bffcfa..2d7dc477fe3 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -668,9 +668,23 @@ static void rna_RegionView3D_view_matrix_set(PointerRNA *ptr, const float *value static int rna_SpaceView3D_viewport_shade_get(PointerRNA *ptr) { + bScreen *screen = ptr->id.data; + Scene *scene = WM_windows_scene_get_from_screen(G.main->wm.first, screen); + RenderEngineType *type = RE_engines_find(scene->view_render.engine_id); View3D *v3d = (View3D *)ptr->data; - int drawtype = v3d->drawtype; - return drawtype; + + if (BKE_scene_uses_blender_eevee(scene)) { + if (v3d->drawtype == OB_MATERIAL) { + return OB_RENDER; + } + } + else if (v3d->drawtype == OB_RENDER) { + if (!(type && type->render_to_view)) { + return OB_MATERIAL; + } + } + + return v3d->drawtype; } static void rna_SpaceView3D_viewport_shade_set(PointerRNA *ptr, int value) @@ -683,14 +697,27 @@ static void rna_SpaceView3D_viewport_shade_set(PointerRNA *ptr, int value) } static const EnumPropertyItem *rna_SpaceView3D_viewport_shade_itemf( - bContext *UNUSED(C), PointerRNA *UNUSED(ptr), + bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free) { + wmWindow *win = CTX_wm_window(C); + Scene *scene = WM_window_get_active_scene(win); + RenderEngineType *type = RE_engines_find(scene->view_render.engine_id); + EnumPropertyItem *item = NULL; int totitem = 0; RNA_enum_items_add_value(&item, &totitem, rna_enum_viewport_shade_items, OB_SOLID); - RNA_enum_items_add_value(&item, &totitem, rna_enum_viewport_shade_items, OB_RENDER); + + if (BKE_scene_uses_blender_eevee(scene)) { + RNA_enum_items_add_value(&item, &totitem, rna_enum_viewport_shade_items, OB_RENDER); + } + else { + RNA_enum_items_add_value(&item, &totitem, rna_enum_viewport_shade_items, OB_MATERIAL); + if (type && type->render_to_view) { + RNA_enum_items_add_value(&item, &totitem, rna_enum_viewport_shade_items, OB_RENDER); + } + } RNA_enum_item_end(&item, &totitem); *r_free = true; |