[Bf-blender-cvs] [63bbb02] soc-2016-pbvh-painting: Moved maps out of strokecache and into sculptsession.

Nathan Vollmer noreply at git.blender.org
Sat Jun 25 23:48:11 CEST 2016


Commit: 63bbb02559d9a7b6a44c0df757bf2345c6358738
Author: Nathan Vollmer
Date:   Sat Jun 25 15:48:02 2016 -0600
Branches: soc-2016-pbvh-painting
https://developer.blender.org/rB63bbb02559d9a7b6a44c0df757bf2345c6358738

Moved maps out of strokecache and into sculptsession.

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

M	source/blender/blenkernel/BKE_paint.h
M	source/blender/blenkernel/intern/paint.c
M	source/blender/editors/sculpt_paint/paint_vertex.c
M	source/blender/editors/sculpt_paint/sculpt_intern.h

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

diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index bf1cfb2..a68981c 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -28,6 +28,8 @@
 #ifndef __BKE_PAINT_H__
 #define __BKE_PAINT_H__
 
+#include "BKE_mesh_mapping.h"
+
 /** \file BKE_paint.h
  *  \ingroup bke
  */
@@ -197,6 +199,11 @@ typedef struct SculptSession {
 
 	struct SculptStroke *stroke;
 	struct StrokeCache *cache;
+
+	int *map_mem;
+	MeshElemMap* vert_to_loop;
+	int *poly_map_mem;
+	MeshElemMap* vert_to_poly;
 } SculptSession;
 
 void BKE_sculptsession_free(struct Object *ob);
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 8c15026..d8e1a53 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -709,6 +709,16 @@ void BKE_sculptsession_free(Object *ob)
 		if (ss->deform_imats)
 			MEM_freeN(ss->deform_imats);
 
+		/* Free maps */
+		if (ss->vert_to_loop)
+			MEM_freeN(ss->vert_to_loop);
+		if (ss->map_mem)
+			MEM_freeN(ss->map_mem);
+		if (ss->vert_to_poly)
+			MEM_freeN(ss->vert_to_poly);
+		if (ss->poly_map_mem)
+			MEM_freeN(ss->poly_map_mem);
+
 		MEM_freeN(ss);
 
 		ob->sculpt = NULL;
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index 3f895c6..f4a46d02 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -1783,6 +1783,15 @@ static void vertex_paint_init_session(Scene *scene, Object *ob)
 {
 	ob->sculpt = MEM_callocN(sizeof(SculptSession), "sculpt session");
 
+	/* Create maps */
+	Mesh *me = ob->data;
+	ob->sculpt->map_mem = NULL;
+	ob->sculpt->vert_to_loop = NULL;
+	ob->sculpt->poly_map_mem = NULL;
+	ob->sculpt->vert_to_poly = NULL;
+	BKE_mesh_vert_loop_map_create(&ob->sculpt->vert_to_loop, &ob->sculpt->map_mem, me->mpoly, me->mloop, me->totvert, me->totpoly, me->totloop);
+	BKE_mesh_vert_poly_map_create(&ob->sculpt->vert_to_poly, &ob->sculpt->poly_map_mem, me->mpoly, me->mloop, me->totvert, me->totpoly, me->totloop);
+
 	BKE_sculpt_update_mesh_elements(scene, scene->toolsettings->sculpt, ob, 0, false);
 }
 
@@ -2777,10 +2786,6 @@ static int vpaint_mode_toggle_exec(bContext *C, wmOperator *op)
 
 		/* If the cache is not released by a cancel or a done, free it now. */
 		if (ob->sculpt->cache){
-			MEM_freeN(ob->sculpt->cache->vert_to_loop);
-			MEM_freeN(ob->sculpt->cache->map_mem);
-			MEM_freeN(ob->sculpt->cache->vert_to_poly);
-			MEM_freeN(ob->sculpt->cache->poly_map_mem);
 			MEM_freeN(ob->sculpt->cache->totloopsHit);
 			MEM_freeN(ob->sculpt->cache->totalRed);
 			MEM_freeN(ob->sculpt->cache->totalGreen);
@@ -2818,18 +2823,6 @@ static int vpaint_mode_toggle_exec(bContext *C, wmOperator *op)
 		/* Cache needs to be initialized before mesh_build_data is called. */
 		ob->sculpt->cache = MEM_callocN(sizeof(StrokeCache), "stroke cache");
 
-		/* Create maps */
-		Mesh *me = ob->data;
-		ob->sculpt->cache->tot_verts = me->totvert;
-		ob->sculpt->cache->verts = me->mvert;
-		ob->sculpt->cache->map_mem = NULL;
-		ob->sculpt->cache->vert_to_loop = NULL;
-		ob->sculpt->cache->poly_map_mem = NULL;
-		ob->sculpt->cache->vert_to_poly = NULL;
-		BKE_mesh_vert_loop_map_create(&ob->sculpt->cache->vert_to_loop, &ob->sculpt->cache->map_mem, me->mpoly, me->mloop, me->totvert, me->totpoly, me->totloop);
-		BKE_mesh_vert_poly_map_create(&ob->sculpt->cache->vert_to_poly, &ob->sculpt->cache->poly_map_mem, me->mpoly, me->mloop, me->totvert, me->totpoly, me->totloop);
-		
-	
 		Brush *brush = BKE_paint_brush(&vp->paint);
 		int totNode = 0;
 		//I think the totNodes might include internal nodes, and we really only need the tot leaves.
@@ -3051,10 +3044,10 @@ static void do_vpaint_brush_calc_ave_color_cb_ex(
 			if (BKE_brush_curve_strength(data->brush, test.dist, cache->radius) > 0.0) {
 				int vertexIndex = vd.vert_indices[vd.i];
 
-				data->ob->sculpt->cache->totloopsHit[n] += cache->vert_to_loop[vertexIndex].count;
+				cache->totloopsHit[n] += ss->vert_to_loop[vertexIndex].count;
 				//if a vertex is within the brush region, then add it's color to the blend.
-				for (int j = 0; j < cache->vert_to_loop[vertexIndex].count; ++j) {
-					int loopIndex = cache->vert_to_loop[vertexIndex].indices[j];
+				for (int j = 0; j < ss->vert_to_loop[vertexIndex].count; ++j) {
+					int loopIndex = ss->vert_to_loop[vertexIndex].indices[j];
 					col = (char *)(&lcol[loopIndex]);
 					blend[0] += col[0];
 					blend[1] += col[1];
@@ -3097,8 +3090,8 @@ static void do_vpaint_brush_draw_task_cb_ex(
 			int vertexIndex = vd.vert_indices[vd.i];
 			
 			//if a vertex is within the brush region, then paint each loop that vertex owns.
-			for (int j = 0; j < cache->vert_to_loop[vertexIndex].count; ++j) {
-				int loopIndex = cache->vert_to_loop[vertexIndex].indices[j];
+			for (int j = 0; j < ss->vert_to_loop[vertexIndex].count; ++j) {
+				int loopIndex = ss->vert_to_loop[vertexIndex].indices[j];
 				//Mix the new color with the original based on the brush strength and the curve.
 				lcol[loopIndex] = vpaint_blend(data->vp, lcol[loopIndex], lcolorig[loopIndex], data->vpd->paintcol, 255.0 * fade * bstrength, 255.0);
 			}
@@ -3144,8 +3137,8 @@ static void do_vpaint_brush_blur_task_cb_ex(
 			blend[1] = 0; 
 			blend[2] = 0; 
 			blend[3] = 0;
-			for (int j = 0; j < cache->vert_to_poly[vertexIndex].count; j++) {
-				int polyIndex = cache->vert_to_poly[vertexIndex].indices[j];
+			for (int j = 0; j < ss->vert_to_poly[vertexIndex].count; j++) {
+				int polyIndex = ss->vert_to_poly[vertexIndex].indices[j];
 				MPoly poly = data->me->mpoly[polyIndex];
 				totalHitLoops += poly.totloop;
 				for (int k = 0; k < poly.totloop; k++) {
@@ -3165,8 +3158,8 @@ static void do_vpaint_brush_blur_task_cb_ex(
 				col[3] = divide_round_i(blend[3], totalHitLoops);
 
 				//if a vertex is within the brush region, then paint each loop that vertex owns.
-				for (int j = 0; j < cache->vert_to_loop[vertexIndex].count; ++j) {
-					int loopIndex = cache->vert_to_loop[vertexIndex].indices[j];
+				for (int j = 0; j < ss->vert_to_loop[vertexIndex].count; ++j) {
+					int loopIndex = ss->vert_to_loop[vertexIndex].indices[j];
 					//Mix the new color with the original based on the brush strength and the curve.
 					lcol[loopIndex] = vpaint_blend(data->vp, lcol[loopIndex], lcolorig[loopIndex], *((unsigned int*)col), 255.0 * fade * bstrength, 255.0);
 				}
@@ -3400,16 +3393,6 @@ static void vpaint_cancel(bContext *C, wmOperator *op)
 {
 	Object *ob = CTX_data_active_object(C);
 	if (ob->sculpt->cache){
-		MEM_freeN(ob->sculpt->cache->vert_to_loop);
-		MEM_freeN(ob->sculpt->cache->map_mem);
-		MEM_freeN(ob->sculpt->cache->vert_to_poly);
-		MEM_freeN(ob->sculpt->cache->poly_map_mem);
-		MEM_freeN(ob->sculpt->cache->totloopsHit);
-		MEM_freeN(ob->sculpt->cache->totalRed);
-		MEM_freeN(ob->sculpt->cache->totalGreen);
-		MEM_freeN(ob->sculpt->cache->totalBlue);
-		MEM_freeN(ob->sculpt->cache->totalAlpha);
-		MEM_freeN(ob->sculpt->cache->colorWeight);
 		sculpt_cache_free(ob->sculpt->cache);
 		ob->sculpt->cache = NULL;
 	}
diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h b/source/blender/editors/sculpt_paint/sculpt_intern.h
index 34c98a79..3015d74 100644
--- a/source/blender/editors/sculpt_paint/sculpt_intern.h
+++ b/source/blender/editors/sculpt_paint/sculpt_intern.h
@@ -37,8 +37,8 @@
 #include "DNA_vec_types.h"
 #include "DNA_key_types.h"
 #include "DNA_brush_types.h"
-#include "DNA_mesh_types.h"
 #include "DNA_view3d_types.h"
+#include "DNA_mesh_types.h"
 
 #include "BLI_bitmap.h"
 #include "BLI_dial.h"
@@ -46,7 +46,6 @@
 #include "BLI_threads.h"
 
 #include "BKE_pbvh.h"
-#include "BKE_mesh_mapping.h"
 
 #include "ED_view3d.h"
 
@@ -316,12 +315,6 @@ typedef struct StrokeCache {
 	rcti previous_r; /* previous redraw rectangle */
 	rcti current_r; /* current redraw rectangle */
 
-	int tot_verts;
-	MVert *verts;
-	int *map_mem;
-	MeshElemMap* vert_to_loop;
-	int *poly_map_mem;
-	MeshElemMap* vert_to_poly;
 	unsigned int* totalRed;
 	unsigned int* totalGreen;
 	unsigned int* totalBlue;




More information about the Bf-blender-cvs mailing list