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:
authorPablo Dobarro <pablodp606@gmail.com>2020-09-18 20:30:02 +0300
committerPablo Dobarro <pablodp606@gmail.com>2020-09-18 20:30:51 +0300
commit6c9ec1c893f98c2349edd3aaae4b606b55b393c9 (patch)
tree1a3747a77a7eacd59304143ef717896fb5991371 /source/blender/draw/engines
parentea6cd1c8f05b27a81e835251e779f047a3488203 (diff)
Sculpt: Render Mask and Face Sets with modifiers active
This removes the limitation of the sculpt overlays not being visible with modifiers active. Reviewed By: fclem Maniphest Tasks: T68900 Differential Revision: https://developer.blender.org/D8673
Diffstat (limited to 'source/blender/draw/engines')
-rw-r--r--source/blender/draw/engines/overlay/overlay_sculpt.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_sculpt.c b/source/blender/draw/engines/overlay/overlay_sculpt.c
index b36252ead30..c6c617fd29b 100644
--- a/source/blender/draw/engines/overlay/overlay_sculpt.c
+++ b/source/blender/draw/engines/overlay/overlay_sculpt.c
@@ -22,6 +22,7 @@
#include "DRW_render.h"
+#include "draw_cache_impl.h"
#include "overlay_private.h"
#include "BKE_paint.h"
@@ -48,14 +49,21 @@ void OVERLAY_sculpt_cache_populate(OVERLAY_Data *vedata, Object *ob)
{
OVERLAY_PrivateData *pd = vedata->stl->pd;
const DRWContextState *draw_ctx = DRW_context_state_get();
+ struct GPUBatch *sculpt_overlays;
PBVH *pbvh = ob->sculpt->pbvh;
const bool use_pbvh = BKE_sculptsession_use_pbvh_draw(ob, draw_ctx->v3d);
- if (use_pbvh || !ob->sculpt->deform_modifiers_active || ob->sculpt->shapekey_active) {
- if (!use_pbvh || pbvh_has_mask(pbvh) || pbvh_has_face_sets(pbvh)) {
+ if (pbvh_has_mask(pbvh) || pbvh_has_face_sets(pbvh)) {
+ if (use_pbvh) {
DRW_shgroup_call_sculpt(pd->sculpt_mask_grp, ob, false, true);
}
+ else {
+ sculpt_overlays = DRW_mesh_batch_cache_get_sculpt_overlays(ob->data);
+ if (sculpt_overlays) {
+ DRW_shgroup_call(pd->sculpt_mask_grp, sculpt_overlays, ob);
+ }
+ }
}
}