diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-11-30 03:53:50 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-11-30 04:02:36 +0300 |
commit | 6a4f5f6eb44b3dacff51ae8c152689e8ddf6e7b2 (patch) | |
tree | 1fb36d73470fa35a7029c0bd4fe8a9cc3ca992ff /source/blender/draw/engines/workbench/workbench_materials.c | |
parent | e1023014f4d28bd74dc2f44845ed04669b51caa5 (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.c | 44 |
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; } |