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 {
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs