[Bf-blender-cvs] [47ef301c76f] blender2.8: Texture Paint: fix face selection with subsurface.

Alexander Gavrilov noreply at git.blender.org
Sat Dec 1 12:47:27 CET 2018


Commit: 47ef301c76f8a5471c962a4453112a0a49a8f975
Author: Alexander Gavrilov
Date:   Sat Dec 1 14:38:11 2018 +0300
Branches: blender2.8
https://developer.blender.org/rB47ef301c76f8a5471c962a4453112a0a49a8f975

Texture Paint: fix face selection with subsurface.

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

M	source/blender/draw/intern/draw_cache_impl_mesh.c
M	source/blender/editors/space_view3d/drawobject.c

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

diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 5ee91f52342..9902f241efd 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -3549,14 +3549,22 @@ static GPUVertBuf *mesh_create_tri_select_id(
 				}
 			}
 			else {
+				const int *p_origindex = NULL;
+				if (rdata->me != NULL) {
+					p_origindex = CustomData_get_layer(&rdata->me->pdata, CD_ORIGINDEX);
+				}
+
 				for (int i = 0; i < tri_len; i++) {
 					const MLoopTri *mlt = &rdata->mlooptri[i];
 					const int poly_index = mlt->poly;
 					if (!(use_hide && (rdata->mpoly[poly_index].flag & ME_HIDE))) {
-						int select_id;
-						GPU_select_index_get(poly_index + select_id_offset, &select_id);
-						for (uint tri_corner = 0; tri_corner < 3; tri_corner++) {
-							GPU_vertbuf_attr_set(vbo, attr_id.col, cidx++, &select_id);
+						int orig_index = p_origindex ? p_origindex[poly_index] : poly_index;
+						if (orig_index != ORIGINDEX_NONE) {
+							int select_id;
+							GPU_select_index_get(orig_index + select_id_offset, &select_id);
+							for (uint tri_corner = 0; tri_corner < 3; tri_corner++) {
+								GPU_vertbuf_attr_set(vbo, attr_id.col, cidx++, &select_id);
+							}
 						}
 					}
 				}
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 9a73ef25819..bb574874cad 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -295,8 +295,9 @@ static void bbs_mesh_solid_verts(Depsgraph *UNUSED(depsgraph), Scene *UNUSED(sce
 static void bbs_mesh_solid_faces(Scene *UNUSED(scene), Object *ob)
 {
 	Mesh *me = ob->data;
+	Mesh *me_orig = DEG_get_original_object(ob)->data;
 	GPUBatch *batch;
-	if ((me->editflag & ME_EDIT_PAINT_FACE_SEL)) {
+	if ((me_orig->editflag & ME_EDIT_PAINT_FACE_SEL)) {
 		batch = DRW_mesh_batch_cache_get_triangles_with_select_id(me, true, 1);
 	}
 	else {



More information about the Bf-blender-cvs mailing list