[Bf-blender-cvs] [977c6b2] soc-2016-pbvh-painting: Remove call to BKE_pbvh_draw from draw_mesh_paint, add pbvh BB drawing to dm's mappedfaces drawing callbacks.

Bastien Montagne noreply at git.blender.org
Wed May 25 12:15:27 CEST 2016


Commit: 977c6b2316ef09d0fa14a59bc39bda88c69f2033
Author: Bastien Montagne
Date:   Wed May 25 12:05:32 2016 +0200
Branches: soc-2016-pbvh-painting
https://developer.blender.org/rB977c6b2316ef09d0fa14a59bc39bda88c69f2033

Remove call to BKE_pbvh_draw from draw_mesh_paint, add pbvh BB drawing to dm's mappedfaces drawing callbacks.

Reading BKE_draw_pbvh code, this function actually handles the whole drawing,
seems like it does a partial update of only modified geometry (optimized drawing
in solid shadding case), don’t think we need that for v/wpaint, at least for now.

So rather just added a call to BKE_pbvh_draw_BB (in case debug value is set)
in dm's mappedfaces drawing callbacks, should do for now.

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

M	source/blender/blenkernel/BKE_pbvh.h
M	source/blender/blenkernel/intern/cdderivedmesh.c
M	source/blender/blenkernel/intern/pbvh.c
M	source/blender/blenkernel/intern/subsurf_ccg.c
M	source/blender/editors/space_view3d/drawmesh.c
M	source/blender/editors/space_view3d/drawobject.c

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

diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index 927303f..39ca3fe 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -118,6 +118,7 @@ void BKE_pbvh_raycast_project_ray_root(
 void BKE_pbvh_node_draw(PBVHNode *node, void *data);
 void BKE_pbvh_draw(PBVH *bvh, float (*planes)[4], float (*face_nors)[3],
                    int (*setMaterial)(int matnr, void *attribs), bool wireframe, bool fast);
+void BKE_pbvh_draw_BB(PBVH *bvh);
 
 /* PBVH Access */
 typedef enum {
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index af1ad49..8f83bdf 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -668,6 +668,11 @@ static void cdDM_drawMappedFaces(
 
 	const int *index_mp_to_orig  = dm->getPolyDataArray(dm, CD_ORIGINDEX);
 
+	if (cddm->pbvh) {
+		if (G.debug_value == 14)
+			BKE_pbvh_draw_BB(cddm->pbvh);
+	}
+
 	/* fist, setup common buffers */
 	GPU_vertex_setup(dm);
 	GPU_triangle_setup(dm);
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index d73f087..f66bcbc 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -1156,7 +1156,7 @@ static void pbvh_update_draw_buffers(PBVH *bvh, PBVHNode **nodes, int totnode)
 	}
 }
 
-static void pbvh_draw_BB(PBVH *bvh)
+void BKE_pbvh_draw_BB(PBVH *bvh)
 {
 	GPU_init_draw_pbvh_BB();
 
@@ -1850,7 +1850,7 @@ void BKE_pbvh_draw(PBVH *bvh, float (*planes)[4], float (*fnors)[3],
 	}
 
 	if (G.debug_value == 14)
-		pbvh_draw_BB(bvh);
+		BKE_pbvh_draw_BB(bvh);
 }
 
 void BKE_pbvh_grids_update(PBVH *bvh, CCGElem **grids, void **gridfaces,
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 5fd418f..7eaeb09 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -3564,6 +3564,11 @@ static void ccgDM_drawMappedFaces(DerivedMesh *dm,
 	int gridFaces = gridSize - 1, totface;
 	int prev_mat_nr = -1;
 
+	if (ccgdm->pbvh) {
+		if (G.debug_value == 14)
+			BKE_pbvh_draw_BB(ccgdm->pbvh);
+	}
+
 #ifdef WITH_OPENSUBDIV
 	if (ccgdm->useGpuBackend) {
 		int new_matnr;
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index fe9ec3a..86f3edf 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -69,8 +69,6 @@
 
 #include "ED_uvedit.h"
 
-#include "BKE_pbvh.h"
-
 #include "view3d_intern.h"  /* own include */
 
 /* user data structures for derived mesh callbacks */
@@ -1370,18 +1368,5 @@ void draw_mesh_paint(View3D *v3d, RegionView3D *rv3d,
 			set_inverted_drawing(0);
 		}
 	}
-
-	/* For drawing the PBVH */
-	if (ob->sculpt){
-		if (ob->sculpt->pbvh) {
-			if (BKE_pbvh_has_faces(ob->sculpt->pbvh)) {
-				float(*face_nors)[3] = CustomData_get_layer(&dm->polyData, CD_NORMAL);
-
-				BKE_pbvh_draw(ob->sculpt->pbvh, NULL, face_nors,
-					GPU_object_material_visible, false, false);
-				glShadeModel(GL_FLAT);
-			}
-		}
-	}
 }
 
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 75af46e..8487726 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -4168,7 +4168,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
 		}
 	}
 	else if (dt == OB_PAINT) {
-		draw_mesh_paint(v3d, rv3d, ob, dm, draw_flags, NULL, GPU_object_material_bind);
+		draw_mesh_paint(v3d, rv3d, ob, dm, draw_flags);
 
 		/* since we already draw wire as wp guide, don't draw over the top */
 		draw_wire = OBDRAW_WIRE_OFF;




More information about the Bf-blender-cvs mailing list