diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-07-12 17:27:06 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-07-12 18:59:44 +0300 |
commit | b4988d01cbe9c850a365604967bd3a5e03fc9a72 (patch) | |
tree | 147a8bb95d09b9c1fd0efef6c4d09d34df85783e /source/blender/draw/engines/eevee/eevee_materials.c | |
parent | 95a7a0a06ebc7c88bc56c90bb4edfeef302694b7 (diff) |
DwM: Option to use final material over mode shading
Support using full material shading in sculpt & paint modes mode.
Access 'Full Shading' from the display panel when in paint modes.
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_materials.c')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_materials.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c index 57015e8a582..8b94ffb34c3 100644 --- a/source/blender/draw/engines/eevee/eevee_materials.c +++ b/source/blender/draw/engines/eevee/eevee_materials.c @@ -27,6 +27,7 @@ #include "DNA_world_types.h" #include "DNA_modifier_types.h" +#include "DNA_view3d_types.h" #include "BLI_dynstr.h" #include "BLI_ghash.h" @@ -719,7 +720,7 @@ void EEVEE_materials_cache_init(EEVEE_Data *vedata) } #define ADD_SHGROUP_CALL(shgrp, ob, geom) do { \ - if (is_sculpt_mode) { \ + if (is_sculpt_mode_draw) { \ DRW_shgroup_call_sculpt_add(shgrp, ob, ob->obmat); \ } \ else { \ @@ -927,11 +928,12 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_SceneLayerData *sl const bool do_cull = BKE_collection_engine_property_value_get_bool(ces_mode_ob, "show_backface_culling"); const bool is_active = (ob == draw_ctx->obact); const bool is_sculpt_mode = is_active && (ob->mode & OB_MODE_SCULPT) != 0; + const bool is_sculpt_mode_draw = is_sculpt_mode && (draw_ctx->v3d->flag2 & V3D_SHOW_MODE_SHADE_OVERRIDE) == 0; const bool is_default_mode_shader = is_sculpt_mode; /* First get materials for this mesh. */ if (ELEM(ob->type, OB_MESH)) { - const int materials_len = MAX2(1, (is_sculpt_mode ? 1 : ob->totcol)); + const int materials_len = MAX2(1, (is_sculpt_mode_draw ? 1 : ob->totcol)); struct DRWShadingGroup **shgrp_array = BLI_array_alloca(shgrp_array, materials_len); struct DRWShadingGroup **shgrp_depth_array = BLI_array_alloca(shgrp_depth_array, materials_len); @@ -943,13 +945,20 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_SceneLayerData *sl bool use_flat_nor = false; if (is_default_mode_shader) { - if (is_sculpt_mode) { + if (is_sculpt_mode_draw) { use_flat_nor = DRW_object_is_flat_normal(ob); } } for (int i = 0; i < materials_len; ++i) { - Material *ma = give_current_material(ob, i + 1); + Material *ma; + + if (is_sculpt_mode_draw) { + ma = NULL; + } + else { + ma = give_current_material(ob, i + 1); + } gpumat_array[i] = NULL; gpumat_depth_array[i] = NULL; @@ -980,6 +989,10 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_SceneLayerData *sl } } + if (is_sculpt_mode && is_sculpt_mode_draw == false) { + DRW_cache_mesh_sculpt_coords_ensure(ob); + } + /* Get per-material split surface */ struct Gwn_Batch **mat_geom = DRW_cache_object_surface_material_get(ob, gpumat_array, materials_len); if (mat_geom) { |