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:
authorClément Foucault <foucault.clem@gmail.com>2018-11-30 03:53:50 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-11-30 04:02:36 +0300
commit6a4f5f6eb44b3dacff51ae8c152689e8ddf6e7b2 (patch)
tree1fb36d73470fa35a7029c0bd4fe8a9cc3ca992ff /source/blender/draw/engines/workbench/workbench_materials.c
parente1023014f4d28bd74dc2f44845ed04669b51caa5 (diff)
Workbench: Cleanups & Simplifications
* Move the curvature computation to the cavity pass: One can argue it's not the best performance wise (it gets a tiny perf pernalty if it is done alone without the ssao), but it make the code cleaner and reduce considerably the number of shader variation possible. * Lower shader variation to 2^8 instead of 2^12
Diffstat (limited to 'source/blender/draw/engines/workbench/workbench_materials.c')
-rw-r--r--source/blender/draw/engines/workbench/workbench_materials.c44
1 files changed, 10 insertions, 34 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c
index 42e52e037f3..19fb8efb812 100644
--- a/source/blender/draw/engines/workbench/workbench_materials.c
+++ b/source/blender/draw/engines/workbench/workbench_materials.c
@@ -59,17 +59,8 @@ char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, bool use_text
if (wpd->shading.flag & V3D_SHADING_SHADOW) {
BLI_dynstr_appendf(ds, "#define V3D_SHADING_SHADOW\n");
}
- if (SSAO_ENABLED(wpd)) {
- BLI_dynstr_appendf(ds, "#define V3D_SHADING_SSAO\n");
- }
- if (CURVATURE_ENABLED(wpd)) {
- BLI_dynstr_appendf(ds, "#define V3D_SHADING_CURVATURE\n");
- if (U.pixelsize > 1.5f) {
- BLI_dynstr_appendf(ds, "#define CURVATURE_OFFSET 2\n");
- }
- else {
- BLI_dynstr_appendf(ds, "#define CURVATURE_OFFSET 1\n");
- }
+ if (SSAO_ENABLED(wpd) || CURVATURE_ENABLED(wpd)) {
+ BLI_dynstr_appendf(ds, "#define WB_CAVITY\n");
}
if (SPECULAR_HIGHLIGHT_ENABLED(wpd)) {
BLI_dynstr_appendf(ds, "#define V3D_SHADING_SPECULAR_HIGHLIGHT\n");
@@ -83,15 +74,6 @@ char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, bool use_text
if (MATCAP_ENABLED(wpd)) {
BLI_dynstr_appendf(ds, "#define V3D_LIGHTING_MATCAP\n");
}
- if (STUDIOLIGHT_TYPE_WORLD_ENABLED(wpd)) {
- BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_TYPE_WORLD\n");
- }
- if (STUDIOLIGHT_TYPE_STUDIO_ENABLED(wpd)) {
- BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_TYPE_STUDIO\n");
- }
- if (STUDIOLIGHT_TYPE_MATCAP_ENABLED(wpd)) {
- BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_TYPE_MATCAP\n");
- }
if (NORMAL_VIEWPORT_PASS_ENABLED(wpd)) {
BLI_dynstr_appendf(ds, "#define NORMAL_VIEWPORT_PASS_ENABLED\n");
}
@@ -147,21 +129,15 @@ int workbench_material_get_shader_index(WORKBENCH_PrivateData *wpd, bool use_tex
int index = 0;
/* 1 bit V3D_SHADING_TEXTURE_COLOR */
SET_FLAG_FROM_TEST(index, use_textures, 1 << 0);
- /* 2 bits FLAT/STUDIO/MATCAP/SCENE */
- SET_FLAG_FROM_TEST(index, wpd->shading.light, wpd->shading.light << 1);
- /* 1 bit V3D_SHADING_SPECULAR_HIGHLIGHT */
- SET_FLAG_FROM_TEST(index, wpd->shading.flag & V3D_SHADING_SPECULAR_HIGHLIGHT, 1 << 3);
- SET_FLAG_FROM_TEST(index, wpd->shading.flag & V3D_SHADING_SHADOW, 1 << 4);
- SET_FLAG_FROM_TEST(index, SSAO_ENABLED(wpd), 1 << 5);
- SET_FLAG_FROM_TEST(index, wpd->shading.flag & V3D_SHADING_OBJECT_OUTLINE, 1 << 6);
- bool uses_curvature = CURVATURE_ENABLED(wpd);
- SET_FLAG_FROM_TEST(index, uses_curvature, 1 << 7);
- SET_FLAG_FROM_TEST(index, uses_curvature && (U.pixelsize > 1.5f), 1 << 8);
- /* 2 bits STUDIOLIGHT_ORIENTATION */
- SET_FLAG_FROM_TEST(index, wpd->studio_light->flag & STUDIOLIGHT_TYPE_WORLD, 1 << 9);
- SET_FLAG_FROM_TEST(index, wpd->studio_light->flag & STUDIOLIGHT_TYPE_MATCAP, 1 << 10);
+ /* 2 bits FLAT/STUDIO/MATCAP + Specular highlight */
+ int ligh_flag = SPECULAR_HIGHLIGHT_ENABLED(wpd) ? 3 : wpd->shading.light;
+ SET_FLAG_FROM_TEST(index, wpd->shading.light, ligh_flag << 1);
+ /* 3 bits for flags */
+ SET_FLAG_FROM_TEST(index, wpd->shading.flag & V3D_SHADING_SHADOW, 1 << 3);
+ SET_FLAG_FROM_TEST(index, wpd->shading.flag & V3D_SHADING_CAVITY, 1 << 4);
+ SET_FLAG_FROM_TEST(index, wpd->shading.flag & V3D_SHADING_OBJECT_OUTLINE, 1 << 5);
/* 1 bit for hair */
- SET_FLAG_FROM_TEST(index, is_hair, 1 << 11);
+ SET_FLAG_FROM_TEST(index, is_hair, 1 << 6);
return index;
}