[Bf-blender-cvs] [8f0a44a] master: Cleanup: use BLI_bitmap for bevel-split

Campbell Barton noreply at git.blender.org
Sat Jun 25 03:20:27 CEST 2016


Commit: 8f0a44a5d55d0f348c924d75be10565e8cecb6ab
Author: Campbell Barton
Date:   Sat Jun 25 11:24:25 2016 +1000
Branches: master
https://developer.blender.org/rB8f0a44a5d55d0f348c924d75be10565e8cecb6ab

Cleanup: use BLI_bitmap for bevel-split

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

M	source/blender/blenkernel/BKE_displist.h
M	source/blender/blenkernel/intern/displist.c
M	source/blender/render/intern/source/convertblender.c

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

diff --git a/source/blender/blenkernel/BKE_displist.h b/source/blender/blenkernel/BKE_displist.h
index 3b09677..9625f05 100644
--- a/source/blender/blenkernel/BKE_displist.h
+++ b/source/blender/blenkernel/BKE_displist.h
@@ -45,10 +45,14 @@
 #define DL_VERTS                7
 
 /* dl->flag */
-#define DL_CYCL_U       1
-#define DL_CYCL_V       2
-#define DL_FRONT_CURVE  4
-#define DL_BACK_CURVE   8
+enum {
+	/** U/V swapped here compared with #Nurb.flagu, #Nurb.flagv and #CU_NURB_CYCLIC */
+	DL_CYCL_U       = (1 << 0),
+	DL_CYCL_V       = (1 << 1),
+
+	DL_FRONT_CURVE  = (1 << 2),
+	DL_BACK_CURVE   = (1 << 3),
+};
 
 
 /* prototypes */
@@ -70,7 +74,7 @@ typedef struct DispList {
 	int charidx;
 	int totindex;               /* indexed array drawing surfaces */
 
-	unsigned int *bevelSplitFlag;
+	unsigned int *bevel_split;  /* BLI_bitmap */
 } DispList;
 
 void BKE_displist_copy(struct ListBase *lbn, struct ListBase *lb);
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 98cbe47..b69141f 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -71,7 +71,7 @@ void BKE_displist_elem_free(DispList *dl)
 		if (dl->verts) MEM_freeN(dl->verts);
 		if (dl->nors) MEM_freeN(dl->nors);
 		if (dl->index) MEM_freeN(dl->index);
-		if (dl->bevelSplitFlag) MEM_freeN(dl->bevelSplitFlag);
+		if (dl->bevel_split) MEM_freeN(dl->bevel_split);
 		MEM_freeN(dl);
 	}
 }
@@ -144,8 +144,9 @@ void BKE_displist_copy(ListBase *lbn, ListBase *lb)
 		dln->nors = MEM_dupallocN(dl->nors);
 		dln->index = MEM_dupallocN(dl->index);
 
-		if (dl->bevelSplitFlag)
-			dln->bevelSplitFlag = MEM_dupallocN(dl->bevelSplitFlag);
+		if (dl->bevel_split) {
+			dln->bevel_split = MEM_dupallocN(dl->bevel_split);
+		}
 
 		dl = dl->next;
 	}
@@ -1642,8 +1643,7 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba
 							/* CU_2D conflicts with R_NOPUNOFLIP */
 							dl->rt = nu->flag & ~CU_2D;
 
-							dl->bevelSplitFlag = MEM_callocN(sizeof(*dl->bevelSplitFlag) * ((steps + 0x1F) >> 5),
-							                                 "bevelSplitFlag");
+							dl->bevel_split = BLI_BITMAP_NEW(steps, "bevel_split");
 
 							/* for each point of poly make a bevel piece */
 							bevp_first =  bl->bevpoints;
@@ -1683,7 +1683,7 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba
 								}
 
 								if (bevp->split_tag) {
-									dl->bevelSplitFlag[a >> 5] |= 1 << (a & 0x1F);
+									BLI_BITMAP_ENABLE(dl->bevel_split, a);
 								}
 
 								/* rotate bevel piece and write in data */
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index 8c84777..9948ac9 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -2816,7 +2816,7 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset)
 						}
 					}
 
-					if (dl->bevelSplitFlag || timeoffset==0) {
+					if (dl->bevel_split || timeoffset == 0) {
 						const int startvlak= obr->totvlak;
 
 						for (a=0; a<dl->parts; a++) {
@@ -2856,10 +2856,15 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset)
 							}
 						}
 
-						if (dl->bevelSplitFlag) {
-							for (a=0; a<dl->parts-1+!!(dl->flag&DL_CYCL_V); a++)
-								if (dl->bevelSplitFlag[a>>5]&(1<<(a&0x1F)))
-									split_v_renderfaces(obr, startvlak, startvert, dl->parts, dl->nr, a, dl->flag&DL_CYCL_V, dl->flag&DL_CYCL_U);
+						if (dl->bevel_split) {
+							for (a = 0; a < dl->parts - 1 + !!(dl->flag & DL_CYCL_V); a++) {
+								if (BLI_BITMAP_TEST(dl->bevel_split, a)) {
+									split_v_renderfaces(
+									        obr, startvlak, startvert, dl->parts, dl->nr, a,
+									        /* intentionally swap (v, u) --> (u, v) */
+									        dl->flag & DL_CYCL_V, dl->flag & DL_CYCL_U);
+								}
+							}
 						}
 
 						/* vertex normals */




More information about the Bf-blender-cvs mailing list