diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2018-04-17 15:58:48 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2018-04-17 15:58:48 +0300 |
commit | fa687866924fe3b0f24f2f33d12224b9bca8d298 (patch) | |
tree | 7ff88d0b2f760c0cd3d302d71ed631c53f58588e | |
parent | c7d6aa4338527c4fe580bcbf7f8533f582583e13 (diff) |
Workbench: Draw modes
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_engine.c | 5 | ||||
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_engine.h | 2 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 28 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_space.c | 26 |
4 files changed, 24 insertions, 37 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_engine.c b/source/blender/draw/engines/workbench/workbench_engine.c index 45073466606..830e7d2da6f 100644 --- a/source/blender/draw/engines/workbench/workbench_engine.c +++ b/source/blender/draw/engines/workbench/workbench_engine.c @@ -82,10 +82,9 @@ static void workbench_layer_collection_settings_create(RenderEngine *UNUSED(engi BKE_collection_engine_property_add_float_array(props, "object_color", default_object_color, 3); } - static const DrawEngineDataSize workbench_data_size = DRW_VIEWPORT_DATA_SIZE(WORKBENCH_Data); -DrawEngineType draw_engine_workbench_type = { +DrawEngineType draw_engine_workbench_solid_flat = { NULL, NULL, N_("Workbench"), &workbench_data_size, @@ -107,7 +106,7 @@ RenderEngineType DRW_engine_viewport_workbench_type = { NULL, NULL, WORKBENCH_ENGINE, N_("Workbench"), RE_INTERNAL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &workbench_layer_collection_settings_create, NULL, - &draw_engine_workbench_type, + &draw_engine_workbench_solid_flat, {NULL, NULL, NULL} }; diff --git a/source/blender/draw/engines/workbench/workbench_engine.h b/source/blender/draw/engines/workbench/workbench_engine.h index ca968452090..347633b83e2 100644 --- a/source/blender/draw/engines/workbench/workbench_engine.h +++ b/source/blender/draw/engines/workbench/workbench_engine.h @@ -26,7 +26,7 @@ #ifndef __WORKBENCH_ENGINE_H__ #define __WORKBENCH_ENGINE_H__ -extern DrawEngineType draw_engine_workbench_type; +extern DrawEngineType draw_engine_workbench_solid_flat; extern RenderEngineType DRW_engine_viewport_workbench_type; #endif /* __WORKBENCH_ENGINE_H__ */ diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 7d4d27b7147..c0a5b7e41fc 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -895,15 +895,24 @@ static void drw_engines_enable_external(void) /* TODO revisit this when proper layering is implemented */ /* Gather all draw engines needed and store them in DST.enabled_engines * That also define the rendering order of engines */ -static void drw_engines_enable_from_engine(RenderEngineType *engine_type) +static void drw_engines_enable_from_engine(RenderEngineType *engine_type, int draw_mode) { - /* TODO layers */ - if (engine_type->draw_engine != NULL) { - use_drw_engine(engine_type->draw_engine); - } + switch (draw_mode) { + case OB_SOLID: + use_drw_engine(&draw_engine_workbench_solid_flat); + break; + + default: + case OB_RENDER: + /* TODO layers */ + if (engine_type->draw_engine != NULL) { + use_drw_engine(engine_type->draw_engine); + } - if ((engine_type->flag & RE_INTERNAL) == 0) { - drw_engines_enable_external(); + if ((engine_type->flag & RE_INTERNAL) == 0) { + drw_engines_enable_external(); + } + break; } } @@ -975,8 +984,9 @@ static void drw_engines_enable(ViewLayer *view_layer, RenderEngineType *engine_t { Object *obact = OBACT(view_layer); const int mode = CTX_data_mode_enum_ex(DST.draw_ctx.object_edit, obact, DST.draw_ctx.object_mode); + const int draw_mode = DST.draw_ctx.v3d->drawtype; - drw_engines_enable_from_engine(engine_type); + drw_engines_enable_from_engine(engine_type, draw_mode); if (DRW_state_draw_support()) { drw_engines_enable_from_object_mode(); @@ -1920,6 +1930,8 @@ void DRW_engines_register(void) RE_engines_register(NULL, &DRW_engine_viewport_eevee_type); RE_engines_register(NULL, &DRW_engine_viewport_workbench_type); + DRW_engine_register(&draw_engine_workbench_solid_flat); + DRW_engine_register(&draw_engine_object_type); DRW_engine_register(&draw_engine_edit_armature_type); DRW_engine_register(&draw_engine_edit_curve_type); diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 2d8385a5f83..68edb907870 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -743,20 +743,8 @@ 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); - WorkSpace *workspace = WM_windows_workspace_get_from_screen(G.main->wm.first, screen); - - ViewRender *view_render = BKE_viewrender_get(scene, workspace); - RenderEngineType *type = RE_engines_find(view_render->engine_id); - View3D *v3d = (View3D *)ptr->data; int drawtype = v3d->drawtype; - - if (drawtype == OB_RENDER && !(type && type->render_to_view)) - return OB_SOLID; - return drawtype; } @@ -772,23 +760,11 @@ static void rna_SpaceView3D_viewport_shade_set(PointerRNA *ptr, int value) static const EnumPropertyItem *rna_SpaceView3D_viewport_shade_itemf(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); - WorkSpace *workspace = WM_window_get_active_workspace(win); - ViewRender *view_render = BKE_viewrender_get(scene, workspace); - RenderEngineType *type = RE_engines_find(view_render->engine_id); - EnumPropertyItem *item = NULL; int totitem = 0; - RNA_enum_items_add_value(&item, &totitem, rna_enum_viewport_shade_items, OB_BOUNDBOX); - RNA_enum_items_add_value(&item, &totitem, rna_enum_viewport_shade_items, OB_WIRE); 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_TEXTURE); - 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_items_add_value(&item, &totitem, rna_enum_viewport_shade_items, OB_RENDER); RNA_enum_item_end(&item, &totitem); *r_free = true; |