[Bf-blender-cvs] [5b2cebf49bc] master: Fix T69752: Texture paint sampling colors always 'merged down'

Philipp Oeser noreply at git.blender.org
Thu Sep 12 18:24:06 CEST 2019


Commit: 5b2cebf49bc6e17fd75ab43e33387fc1b257d710
Author: Philipp Oeser
Date:   Thu Sep 12 14:14:40 2019 +0200
Branches: master
https://developer.blender.org/rB5b2cebf49bc6e17fd75ab43e33387fc1b257d710

Fix T69752: Texture paint sampling colors always 'merged down'

Rgression from rBaf4dcc6073fa.

paint_sample_color > imapaint_pick_face uses the the selection buffer
(DRW_select_buffer_sample_point) and to get flat colors [select_id_flat] we
need to be in SCE_SELECT_FACE mode. This was already fine if you had
'Face Selection Masking' turned on, but got colors including lighting
when turned of [select_id_uniform].

There was already an exception in 'select_cache_init' that turns on
SCE_SELECT_FACE for weightpaint, we just need this for texture paint
(vertex paint) as well... Also moved the logic into
select_id_get_object_select_mode.

Note we were also asserting here:
BLI_assert failed: /blender/source/blender/draw/engines/select/
select_engine.c:174, select_cache_init(), at 'e_data.context.select_mode
!= 0'

Note also this is not working correctly for vertexpaint (yet), but has
been discussed in T69752 and there is a solution by @mano-wii in P1032.

Reviewers: mano-wii

Subscribers: mano-wii

Maniphest Tasks: T69752

Differential Revision: https://developer.blender.org/D5775

===================================================================

M	source/blender/draw/engines/select/select_draw_utils.c
M	source/blender/draw/engines/select/select_engine.c

===================================================================

diff --git a/source/blender/draw/engines/select/select_draw_utils.c b/source/blender/draw/engines/select/select_draw_utils.c
index 6a51c28c242..927956dad19 100644
--- a/source/blender/draw/engines/select/select_draw_utils.c
+++ b/source/blender/draw/engines/select/select_draw_utils.c
@@ -62,18 +62,18 @@ void select_id_object_min_max(Object *obj, float r_min[3], float r_max[3])
 short select_id_get_object_select_mode(Scene *scene, Object *ob)
 {
   short r_select_mode = 0;
-  if (ob->mode & (OB_MODE_WEIGHT_PAINT | OB_MODE_VERTEX_PAINT)) {
+  if (ob->mode & (OB_MODE_WEIGHT_PAINT | OB_MODE_VERTEX_PAINT | OB_MODE_TEXTURE_PAINT)) {
+    /* In order to sample flat colors for vertex weights / texturepaint / vertexpaint
+     * we need to be in SCE_SELECT_FACE mode so select_cache_init() correctly sets up
+     * a shgroup with select_id_flat.
+     * Note this is not working correctly for vertexpaint (yet), but has been discussed
+     * in T66645 and there is a solution by @mano-wii in P1032.
+     * So OB_MODE_VERTEX_PAINT is already included here [required for P1032 I guess]. */
     Mesh *me_orig = DEG_get_original_object(ob)->data;
-    if (me_orig->editflag & ME_EDIT_PAINT_FACE_SEL) {
-      r_select_mode = SCE_SELECT_FACE;
-    }
-    else if (me_orig->editflag & ME_EDIT_PAINT_VERT_SEL) {
+    if (me_orig->editflag & ME_EDIT_PAINT_VERT_SEL) {
       r_select_mode = SCE_SELECT_VERTEX;
     }
-  }
-  else if (ob->mode & OB_MODE_TEXTURE_PAINT) {
-    Mesh *me_orig = DEG_get_original_object(ob)->data;
-    if (me_orig->editflag & ME_EDIT_PAINT_FACE_SEL) {
+    else {
       r_select_mode = SCE_SELECT_FACE;
     }
   }
diff --git a/source/blender/draw/engines/select/select_engine.c b/source/blender/draw/engines/select/select_engine.c
index c294bba2083..5dc20a589f0 100644
--- a/source/blender/draw/engines/select/select_engine.c
+++ b/source/blender/draw/engines/select/select_engine.c
@@ -163,13 +163,6 @@ static void select_cache_init(void *vedata)
   if (e_data.context.select_mode == -1) {
     e_data.context.select_mode = select_id_get_object_select_mode(draw_ctx->scene,
                                                                   draw_ctx->obact);
-    if (e_data.context.select_mode == 0) {
-      /* Need for sampling weights. */
-      if (draw_ctx->object_mode & OB_MODE_WEIGHT_PAINT) {
-        e_data.context.select_mode = SCE_SELECT_FACE;
-      }
-    }
-
     BLI_assert(e_data.context.select_mode != 0);
   }



More information about the Bf-blender-cvs mailing list