[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