[Bf-blender-cvs] [fa687866924] blender2.8-workbench: Workbench: Draw modes

Jeroen Bakker noreply at git.blender.org
Tue Apr 17 14:59:03 CEST 2018


Commit: fa687866924fe3b0f24f2f33d12224b9bca8d298
Author: Jeroen Bakker
Date:   Tue Apr 17 14:58:48 2018 +0200
Branches: blender2.8-workbench
https://developer.blender.org/rBfa687866924fe3b0f24f2f33d12224b9bca8d298

Workbench: Draw modes

===================================================================

M	source/blender/draw/engines/workbench/workbench_engine.c
M	source/blender/draw/engines/workbench/workbench_engine.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/makesrna/intern/rna_space.c

===================================================================

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;



More information about the Bf-blender-cvs mailing list