Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <j.bakker@atmind.nl>2018-04-17 15:58:48 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-04-17 15:58:48 +0300
commitfa687866924fe3b0f24f2f33d12224b9bca8d298 (patch)
tree7ff88d0b2f760c0cd3d302d71ed631c53f58588e
parentc7d6aa4338527c4fe580bcbf7f8533f582583e13 (diff)
Workbench: Draw modes
-rw-r--r--source/blender/draw/engines/workbench/workbench_engine.c5
-rw-r--r--source/blender/draw/engines/workbench/workbench_engine.h2
-rw-r--r--source/blender/draw/intern/draw_manager.c28
-rw-r--r--source/blender/makesrna/intern/rna_space.c26
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;