[Bf-blender-cvs] [d26b7592b88] blender2.8-workbench: Workbench: Switching Draw engines based on draw mode

Jeroen Bakker noreply at git.blender.org
Tue Apr 17 16:35:12 CEST 2018


Commit: d26b7592b888ffcbf77c96e74f03970425fed697
Author: Jeroen Bakker
Date:   Tue Apr 17 16:34:41 2018 +0200
Branches: blender2.8-workbench
https://developer.blender.org/rBd26b7592b888ffcbf77c96e74f03970425fed697

Workbench: Switching Draw engines based on draw mode

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

M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/draw/CMakeLists.txt
R100	source/blender/draw/engines/workbench/shaders/silhouette_frag.glsl	source/blender/draw/engines/workbench/shaders/solid_frag.glsl
A	source/blender/draw/engines/workbench/solid_flat_mode.c
M	source/blender/draw/engines/workbench/workbench_engine.c
R067	source/blender/draw/engines/workbench/workbench_materials.c	source/blender/draw/engines/workbench/workbench_materials_solid.c
M	source/blender/draw/engines/workbench/workbench_private.h
M	source/blender/makesrna/intern/rna_space.c

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

diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 7f898cd065e..8fa8d7e36a6 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -46,6 +46,7 @@ class VIEW3D_HT_header(Header):
         # Contains buttons like Mode, Pivot, Manipulator, Layer, Mesh Select Mode...
         row = layout
         layout.template_header_3D()
+        row.prop(view, "viewport_shade")
 
         if obj:
             mode = obj.mode
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 3bf1acaf79e..b22c97e352c 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -104,8 +104,9 @@ set(SRC
 	engines/eevee/eevee_subsurface.c
 	engines/eevee/eevee_temporal_sampling.c
 	engines/eevee/eevee_volumes.c
+	engines/workbench/workbench_materials_solid.c
 	engines/workbench/workbench_engine.c
-	engines/workbench/workbench_materials.c
+	engines/workbench/solid_flat_mode.c
 	engines/external/external_engine.c
 
 	DRW_engine.h
@@ -205,7 +206,7 @@ data_to_c_simple(engines/eevee/shaders/volumetric_resolve_frag.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/volumetric_scatter_frag.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/volumetric_integration_frag.glsl SRC)
 
-data_to_c_simple(engines/workbench/shaders/silhouette_frag.glsl SRC)
+data_to_c_simple(engines/workbench/shaders/solid_frag.glsl SRC)
 data_to_c_simple(engines/workbench/shaders/workbench_vert.glsl SRC)
 
 data_to_c_simple(modes/shaders/common_globals_lib.glsl SRC)
diff --git a/source/blender/draw/engines/workbench/shaders/silhouette_frag.glsl b/source/blender/draw/engines/workbench/shaders/solid_frag.glsl
similarity index 100%
rename from source/blender/draw/engines/workbench/shaders/silhouette_frag.glsl
rename to source/blender/draw/engines/workbench/shaders/solid_frag.glsl
diff --git a/source/blender/draw/engines/workbench/workbench_engine.c b/source/blender/draw/engines/workbench/solid_flat_mode.c
similarity index 65%
copy from source/blender/draw/engines/workbench/workbench_engine.c
copy to source/blender/draw/engines/workbench/solid_flat_mode.c
index 830e7d2da6f..79f1fbd170d 100644
--- a/source/blender/draw/engines/workbench/workbench_engine.c
+++ b/source/blender/draw/engines/workbench/solid_flat_mode.c
@@ -45,41 +45,32 @@
 
 static void workbench_engine_init(void *UNUSED(vedata))
 {
-	workbench_materials_init();
+	workbench_solid_materials_init();
 }
 
 static void workbench_cache_init(void *vedata)
 {
-	workbench_materials_cache_init((WORKBENCH_Data *)vedata);
+	workbench_solid_materials_cache_init((WORKBENCH_Data *)vedata);
 }
 
 static void workbench_cache_populate(void *vedata, Object *ob)
 {
-	workbench_materials_cache_populate((WORKBENCH_Data *)vedata, ob);
+	workbench_solid_materials_cache_populate((WORKBENCH_Data *)vedata, ob);
 }
 
 static void workbench_cache_finish(void *vedata)
 {
-	workbench_materials_cache_finish((WORKBENCH_Data *)vedata);
+	workbench_solid_materials_cache_finish((WORKBENCH_Data *)vedata);
 }
 
 static void workbench_draw_scene(void *vedata)
 {
-	workbench_materials_draw_scene((WORKBENCH_Data *)vedata);
+	workbench_solid_materials_draw_scene((WORKBENCH_Data *)vedata);
 }
 
 static void workbench_engine_free(void)
 {
-	workbench_materials_free();
-}
-
-static void workbench_layer_collection_settings_create(RenderEngine *UNUSED(engine), IDProperty *props)
-{
-	BLI_assert(props &&
-	           props->type == IDP_GROUP &&
-	           props->subtype == IDP_GROUP_SUB_ENGINE_RENDER);
-	float default_object_color[3] = {1.0, 1.0, 1.0};
-	BKE_collection_engine_property_add_float_array(props, "object_color", default_object_color, 3);
+	workbench_solid_materials_free();
 }
 
 static const DrawEngineDataSize workbench_data_size = DRW_VIEWPORT_DATA_SIZE(WORKBENCH_Data);
@@ -100,15 +91,5 @@ DrawEngineType draw_engine_workbench_solid_flat = {
 	NULL,
 };
 
-/* Note: currently unused, we may want to register so we can see this when debugging the view. */
-
-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_solid_flat,
-	{NULL, NULL, NULL}
-};
-
 
 #undef WORKBENCH_ENGINE
diff --git a/source/blender/draw/engines/workbench/workbench_engine.c b/source/blender/draw/engines/workbench/workbench_engine.c
index 830e7d2da6f..2b6c95e301f 100644
--- a/source/blender/draw/engines/workbench/workbench_engine.c
+++ b/source/blender/draw/engines/workbench/workbench_engine.c
@@ -43,36 +43,6 @@
 
 /* Functions */
 
-static void workbench_engine_init(void *UNUSED(vedata))
-{
-	workbench_materials_init();
-}
-
-static void workbench_cache_init(void *vedata)
-{
-	workbench_materials_cache_init((WORKBENCH_Data *)vedata);
-}
-
-static void workbench_cache_populate(void *vedata, Object *ob)
-{
-	workbench_materials_cache_populate((WORKBENCH_Data *)vedata, ob);
-}
-
-static void workbench_cache_finish(void *vedata)
-{
-	workbench_materials_cache_finish((WORKBENCH_Data *)vedata);
-}
-
-static void workbench_draw_scene(void *vedata)
-{
-	workbench_materials_draw_scene((WORKBENCH_Data *)vedata);
-}
-
-static void workbench_engine_free(void)
-{
-	workbench_materials_free();
-}
-
 static void workbench_layer_collection_settings_create(RenderEngine *UNUSED(engine), IDProperty *props)
 {
 	BLI_assert(props &&
@@ -82,24 +52,6 @@ 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_solid_flat = {
-	NULL, NULL,
-	N_("Workbench"),
-	&workbench_data_size,
-	&workbench_engine_init,
-	&workbench_engine_free,
-	&workbench_cache_init,
-	&workbench_cache_populate,
-	&workbench_cache_finish,
-	NULL,
-	&workbench_draw_scene,
-	NULL,
-	NULL,
-	NULL,
-};
-
 /* Note: currently unused, we may want to register so we can see this when debugging the view. */
 
 RenderEngineType DRW_engine_viewport_workbench_type = {
diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials_solid.c
similarity index 67%
rename from source/blender/draw/engines/workbench/workbench_materials.c
rename to source/blender/draw/engines/workbench/workbench_materials_solid.c
index b499a203f18..8b971a4df73 100644
--- a/source/blender/draw/engines/workbench/workbench_materials.c
+++ b/source/blender/draw/engines/workbench/workbench_materials_solid.c
@@ -26,7 +26,8 @@
 #include "workbench_private.h"
 #include "GPU_shader.h"
 
-extern char datatoc_silhouette_frag_glsl[];
+extern char datatoc_solid_frag_glsl[];
+extern char datatoc_flat_lighting_frag_glsl[];
 extern char datatoc_workbench_vert_glsl[];
 
 /* *********** STATIC *********** */
@@ -34,22 +35,23 @@ static struct {
 	struct GPUShader *depth_sh;
 
 	/* Shading Pass */
-	struct GPUShader *silhouette_sh;
+	struct GPUShader *solid_sh;
+	
 } e_data = {NULL};
 
 
-void workbench_materials_init() {
+void workbench_solid_materials_init() {
 	if (!e_data.depth_sh) {
 		/* Depth pass */
 		e_data.depth_sh = DRW_shader_create_3D_depth_only();
 
 		/* Shading pass */
-		e_data.silhouette_sh = DRW_shader_create(
-		        datatoc_workbench_vert_glsl, NULL, datatoc_silhouette_frag_glsl, "\n");
+		e_data.solid_sh = DRW_shader_create(
+		        datatoc_workbench_vert_glsl, NULL, datatoc_solid_frag_glsl, "\n");
 	}
 }
 
-void workbench_materials_cache_init(WORKBENCH_Data* vedata)
+void workbench_solid_materials_cache_init(WORKBENCH_Data* vedata)
 {
 	WORKBENCH_PassList *psl = vedata->psl;
 	WORKBENCH_StorageList *stl = vedata->stl;
@@ -66,14 +68,20 @@ void workbench_materials_cache_init(WORKBENCH_Data* vedata)
 		stl->g_data->depth_shgrp = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass);
 	}
 
-	/* Shadeless Pass */
+	/* Solid Pass */
 	{
 		int state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL;
-		psl->silhouette_pass = DRW_pass_create("Silhouette Pass", state);
+		psl->solid_pass = DRW_pass_create("Solid Pass", state);
+	}
+	
+	/* Flat Lighting Pass */
+	{	
+		int state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL;
+		psl->lighting_pass = DRW_pass_create("Lighting Pass", state);
 	}
 }
 
-void workbench_materials_cache_populate(WORKBENCH_Data* vedata, Object *ob)
+	void workbench_solid_materials_cache_populate(WORKBENCH_Data* vedata, Object *ob)
 {
 	WORKBENCH_PassList *psl = vedata->psl;
 	WORKBENCH_StorageList *stl = vedata->stl;
@@ -90,32 +98,45 @@ void workbench_materials_cache_populate(WORKBENCH_Data* vedata, Object *ob)
 		/* Depth */
 		DRW_shgroup_call_add(stl->g_data->depth_shgrp, geom, ob->obmat);
 		
-		/* Silhouette */
-		grp = DRW_shgroup_create(e_data.silhouette_sh, psl->silhouette_pass);
+		/* Solid */
+		grp = DRW_shgroup_create(e_data.solid_sh, psl->solid_pass);
 		DRW_shgroup_uniform_vec3(grp, "color", color, 1);
 		DRW_shgroup_call_add(grp, geom, ob->obmat);
+		
+		/* Lighting */
+		// if studio lighting
+		
 	}
 }
 
-void workbench_materials_cache_finish(WORKBENCH_Data *vedata)
+void workbench_solid_materials_cache_finish(WORKBENCH_Data *vedata)
 {
 	WORKBENCH_StorageList *stl = ((WORKBENCH_Data *)vedata)->stl;
 
 	UNUSED_VARS(stl);
 }
 
-void workbench_materials_draw_scene(WORKBENCH_Data *vedata)
+void workbench_solid_materials_draw_scene(WORKBENCH_Data *vedata)
 {
 
 	WORKBENCH_PassList *psl = ((WORKBENCH_Data *)vedata)->psl;
+	DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
 	
 	DRW_draw_pass(psl->depth_pass);
-	DRW_draw_pass(psl->silhouette_pass);
+//	if (studio lighting) {
+//		DRW_draw_pass(psl->lighting_pass);
+//		DRW_draw_pass(psl->solid_pass);
+// TODO: COMPOSITE
+// 	}
+	
+// 	if (flat lighting) {
+		DRW_draw_pass(psl->solid_pass);
+// 	}
 }
 
-void workbench_materials_free(void)
+void workbench_solid_materials_free(void)
 {
-	DRW_SHADER_FREE_SAFE(e_data.silhouette_sh);
+	DRW_SHADER_FREE_SAFE(e_data.solid_sh);
 }
 
 
diff --git a/source/blender/draw/engine

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list