[Bf-blender-cvs] [b8f91e8bff0] hair_object: Merge HairPattern into HairCurveData, no reason to keep these separate any more.

Lukas Tönne noreply at git.blender.org
Sun Nov 18 12:31:33 CET 2018


Commit: b8f91e8bff04681a5926fb0e0028e4590f88deef
Author: Lukas Tönne
Date:   Sun Nov 18 11:26:43 2018 +0000
Branches: hair_object
https://developer.blender.org/rBb8f91e8bff04681a5926fb0e0028e4590f88deef

Merge HairPattern into HairCurveData, no reason to keep these separate any more.

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

M	source/blender/blenkernel/BKE_hair.h
M	source/blender/blenkernel/BKE_hair_iterators.h
M	source/blender/blenkernel/intern/hair.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/draw/intern/draw_cache_impl_hair.c
M	source/blender/editors/hair/edithair.c
M	source/blender/editors/hair/edithair_select.c
M	source/blender/editors/hair/edithair_test.c
M	source/blender/editors/space_view3d/view3d_iterators.c
M	source/blender/makesdna/DNA_hair_types.h
M	source/blender/makesrna/intern/rna_hair.c

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

diff --git a/source/blender/blenkernel/BKE_hair.h b/source/blender/blenkernel/BKE_hair.h
index 4e795cf601c..bbdeefc3cf4 100644
--- a/source/blender/blenkernel/BKE_hair.h
+++ b/source/blender/blenkernel/BKE_hair.h
@@ -38,7 +38,6 @@ static const unsigned int HAIR_CURVE_INDEX_NONE = 0xFFFFFFFF;
 
 struct Depsgraph;
 struct HairFollicle;
-struct HairPattern;
 struct HairSystem;
 struct HairDrawSettings;
 struct HairCurveData;
@@ -74,10 +73,6 @@ bool BKE_hair_minmax(struct HairSystem *hsys, float min[3], float max[3]);
 void BKE_hair_boundbox_calc(struct HairSystem *hsys);
 struct BoundBox *BKE_hair_boundbox_get(struct Object *ob);
 
-struct HairPattern *BKE_hair_pattern_new(void);
-void BKE_hair_pattern_free(struct HairPattern *pattern);
-struct HairPattern *BKE_hair_pattern_copy(const struct HairPattern *src_pattern, int flag);
-
 void BKE_hair_curve_data_init(struct HairCurveData *data);
 /* Does not free the data pointer itself! */
 void BKE_hair_curve_data_free(struct HairCurveData *data);
@@ -177,6 +172,7 @@ void BKE_hair_draw_settings_free(struct HairDrawSettings *draw_settings);
 /* === Depsgraph evaluation === */
 
 void BKE_hair_eval_geometry(const struct Depsgraph *depsgraph, struct HairSystem *hsys);
+void BKE_hair_ensure_follicle_space(const struct Mesh *scalp, struct HairCurveData *curve_data);
 
 void BKE_hair_modifiers_calc(const struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob);
 
diff --git a/source/blender/blenkernel/BKE_hair_iterators.h b/source/blender/blenkernel/BKE_hair_iterators.h
index 3962d30a9af..8f67b4a0b0b 100644
--- a/source/blender/blenkernel/BKE_hair_iterators.h
+++ b/source/blender/blenkernel/BKE_hair_iterators.h
@@ -127,10 +127,10 @@ BLI_INLINE HairFiberVertex* BKE_hair_iter__verts_next(HairIterator *iter)
 
 /* Follicles */
 
-BLI_INLINE HairFollicle* BKE_hair_iter__follicles_init(HairIterator *iter, const HairPattern *pattern)
+BLI_INLINE HairFollicle* BKE_hair_iter__follicles_init(HairIterator *iter, const HairCurveData *curve_data)
 {
-	iter->data.follicles.last = pattern->follicles + pattern->num_follicles;
-	iter->data.follicles.follicle = pattern->follicles;
+	iter->data.follicles.last = curve_data->follicles + curve_data->totfollicles;
+	iter->data.follicles.follicle = curve_data->follicles;
 	return iter->data.follicles.follicle;
 }
 
@@ -147,14 +147,14 @@ BLI_INLINE HairFollicle* BKE_hair_iter__follicles_next(HairIterator *iter)
 
 /* Follicle Curves */
 
-BLI_INLINE HairFollicle* BKE_hair_iter__follicle_curves_init(HairIterator *iter, const HairPattern *pattern, const HairCurveData *curve_data)
+BLI_INLINE HairFollicle* BKE_hair_iter__follicle_curves_init(HairIterator *iter, const HairCurveData *curve_data)
 {
 	HairIter__follicle_curves *intern = &iter->data.follicle_curves;
 
-	intern->last = pattern->follicles + pattern->num_follicles;
+	intern->last = curve_data->follicles + curve_data->totfollicles;
 	intern->curves_array = curve_data->curves;
 
-	intern->follicle = pattern->follicles;
+	intern->follicle = curve_data->follicles;
 	while (intern->follicle != intern->last) {
 		if (intern->follicle->curve != HAIR_CURVE_INDEX_NONE) {
 			intern->curve = &intern->curves_array[intern->follicle->curve];
@@ -235,18 +235,18 @@ BLI_INLINE HairFiberVertex* BKE_hair_iter__curve_verts_next(HairIterator *iter)
 	     BKE_hair_iter__verts_valid(iter); \
 	     (ele) = BKE_hair_iter__verts_next(iter), ++(indexvar))
 
-#define BKE_HAIR_ITER_FOLLICLES(ele, iter, pattern) \
-	for ((ele) = BKE_hair_iter__follicles_init((iter), (pattern)); \
+#define BKE_HAIR_ITER_FOLLICLES(ele, iter, curve_data) \
+	for ((ele) = BKE_hair_iter__follicles_init((iter), (curve_data)); \
 	     BKE_hair_iter__follicles_valid(iter); \
 	     (ele) = BKE_hair_iter__follicles_next(iter))
 
-#define BKE_HAIR_ITER_FOLLICLES_INDEX(ele, iter, pattern, indexvar) \
-	for ((ele) = BKE_hair_iter__follicles_init((iter), (pattern)), (indexvar = 0); \
+#define BKE_HAIR_ITER_FOLLICLES_INDEX(ele, iter, curve_data, indexvar) \
+	for ((ele) = BKE_hair_iter__follicles_init((iter), (curve_data)), (indexvar = 0); \
 	     BKE_hair_iter__follicles_valid(iter); \
 	     (ele) = BKE_hair_iter__follicles_next(iter), ++(indexvar))
 
-#define BKE_HAIR_ITER_FOLLICLE_CURVES(ele, curvevar, iter, pattern, curve_data) \
-	for ((ele) = BKE_hair_iter__follicle_curves_init((iter), (pattern), (curve_data)), \
+#define BKE_HAIR_ITER_FOLLICLE_CURVES(ele, curvevar, iter, curve_data) \
+	for ((ele) = BKE_hair_iter__follicle_curves_init((iter), (curve_data)), \
 	         (curvevar) = (iter)->data.follicle_curves.curve; \
 	     BKE_hair_iter__follicle_curves_valid(iter); \
 	     (ele) = BKE_hair_iter__follicle_curves_next((iter)), \
diff --git a/source/blender/blenkernel/intern/hair.c b/source/blender/blenkernel/intern/hair.c
index 24d814fb5f3..28b6a50a1de 100644
--- a/source/blender/blenkernel/intern/hair.c
+++ b/source/blender/blenkernel/intern/hair.c
@@ -72,7 +72,6 @@ void BKE_hair_init(HairSystem *hsys)
 	hsys->bb = BKE_boundbox_alloc_unit();
 
 	BKE_hair_curve_data_init(&hsys->curve_data);
-	hsys->pattern = BKE_hair_pattern_new();
 	hsys->draw_settings = BKE_hair_draw_settings_new();
 }
 
@@ -85,39 +84,11 @@ void *BKE_hair_add(Main *bmain, const char *name)
 	return hsys;
 }
 
-HairPattern *BKE_hair_pattern_new(void)
-{
-	HairPattern *pattern = MEM_callocN(sizeof(HairPattern), "hair pattern");
-	CustomData_reset(&pattern->fdata);
-	return pattern;
-}
-
-void BKE_hair_pattern_free(HairPattern *pattern)
-{
-	if (pattern) {
-		MEM_SAFE_FREE(pattern->follicles);
-		CustomData_free(&pattern->fdata, pattern->num_follicles);
-		MEM_freeN(pattern);
-	}
-}
-
-HairPattern *BKE_hair_pattern_copy(const HairPattern *src_pattern, int flag)
-{
-	HairPattern *dst_pattern = MEM_dupallocN(src_pattern);
-	if (src_pattern) {
-		dst_pattern->follicles = MEM_dupallocN(src_pattern->follicles);
-
-		CustomDataMask mask = CD_MASK_EVERYTHING;
-		const eCDAllocType alloc_type = (flag & LIB_ID_COPY_CD_REFERENCE) ? CD_REFERENCE : CD_DUPLICATE;
-		CustomData_copy(&src_pattern->fdata, &dst_pattern->fdata, mask, alloc_type, dst_pattern->num_follicles);
-	}
-	return dst_pattern;
-}
-
 void BKE_hair_curve_data_init(HairCurveData *data)
 {
 	CustomData_reset(&data->vdata);
 	CustomData_reset(&data->cdata);
+	CustomData_reset(&data->fdata);
 }
 
 /* Does not free the data pointer itself! */
@@ -125,27 +96,33 @@ void BKE_hair_curve_data_free(HairCurveData *data)
 {
 	MEM_SAFE_FREE(data->curves);
 	MEM_SAFE_FREE(data->verts);
+	MEM_SAFE_FREE(data->follicles);
 	CustomData_free(&data->vdata, data->totverts);
 	CustomData_free(&data->cdata, data->totcurves);
+	CustomData_free(&data->fdata, data->totfollicles);
 }
 
 void BKE_hair_curve_data_copy(HairCurveData *dst_data, const HairCurveData *src_data, int flag)
 {
-	if (src_data->curves)
-	{
+	if (src_data->curves) {
 		dst_data->curves = MEM_dupallocN(src_data->curves);
 	}
-	if (src_data->verts)
-	{
+	if (src_data->verts) {
 		dst_data->verts = MEM_dupallocN(src_data->verts);
 	}
+	if (src_data->follicles) {
+		dst_data->follicles = MEM_dupallocN(src_data->follicles);
+	}
+
 	dst_data->totcurves = src_data->totcurves;
 	dst_data->totverts = src_data->totverts;
+	dst_data->totfollicles = src_data->totfollicles;
 
 	CustomDataMask mask = CD_MASK_EVERYTHING;
 	const eCDAllocType alloc_type = (flag & LIB_ID_COPY_CD_REFERENCE) ? CD_REFERENCE : CD_DUPLICATE;
 	CustomData_copy(&src_data->vdata, &dst_data->vdata, mask, alloc_type, dst_data->totverts);
 	CustomData_copy(&src_data->cdata, &dst_data->cdata, mask, alloc_type, dst_data->totcurves);
+	CustomData_copy(&src_data->fdata, &dst_data->fdata, mask, alloc_type, dst_data->totfollicles);
 }
 
 /** Free (or release) any data used by this hair system (does not free the hair system itself). */
@@ -160,14 +137,12 @@ void BKE_hair_free(HairSystem *hsys)
 		EditHair *edit = hsys->edithair;
 
 		BKE_hair_curve_data_free(&edit->curve_data);
-		BKE_hair_pattern_free(edit->pattern);
 
 		MEM_freeN(edit);
 		hsys->edithair = NULL;
 	}
 
 	BKE_hair_curve_data_free(&hsys->curve_data);
-	BKE_hair_pattern_free(hsys->pattern);
 	MEM_SAFE_FREE(hsys->draw_settings);
 	MEM_SAFE_FREE(hsys->mat);
 
@@ -188,7 +163,6 @@ void BKE_hair_copy_data(Main *UNUSED(bmain), HairSystem *hsys_dst, const HairSys
 
 	hsys_dst->edithair = NULL;
 
-	hsys_dst->pattern = BKE_hair_pattern_copy(hsys_src->pattern, flag);
 	BKE_hair_curve_data_copy(&hsys_dst->curve_data, &hsys_src->curve_data, flag);
 
 	hsys_dst->mat = MEM_dupallocN(hsys_src->mat);
@@ -211,7 +185,7 @@ HairSystem *BKE_hair_copy(Main *bmain, const HairSystem *hsys)
 /* Custom data layer functions; those assume that totXXX are set correctly. */
 static void hair_ensure_cdlayers_primary(HairSystem *hsys)
 {
-	// if (!CustomData_get_layer(&hsys->pattern->fdata, CD_MVERT))
+	// if (!CustomData_get_layer(&hsys->curve_data.fdata, CD_MVERT))
 	// 	CustomData_add_layer(&mesh->vdata, CD_MVERT, CD_CALLOC, NULL, mesh->totvert);
 }
 
@@ -232,13 +206,13 @@ HairSystem *BKE_hair_new_nomain(int verts_len, int curves_len, int follicles_len
 	BKE_libblock_init_empty(&hsys->id);
 
 	/* don't use CustomData_reset(...); because we dont want to touch customdata */
-	copy_vn_i(hsys->pattern->fdata.typemap, CD_NUMTYPES, -1);
+	copy_vn_i(hsys->curve_data.fdata.typemap, CD_NUMTYPES, -1);
 	copy_vn_i(hsys->curve_data.vdata.typemap, CD_NUMTYPES, -1);
 	copy_vn_i(hsys->curve_data.cdata.typemap, CD_NUMTYPES, -1);
 
 	hsys->curve_data.totverts = verts_len;
 	hsys->curve_data.totcurves = curves_len;
-	hsys->pattern->num_follicles = follicles_len;
+	hsys->curve_data.totfollicles = follicles_len;
 
 	hair_ensure_cdlayers_primary(hsys);
 	hair_ensure_cdlayers_origindex(hsys);
@@ -257,9 +231,9 @@ static HairSystem *hair_new_nomain_from_template_ex(
 
 	hsys_dst->curve_data.totverts = verts_len;
 	hsys_dst->curve_data.totcurves = curves_len;
-	hsys_dst->pattern->num_follicles = follicles_len;
+	hsys_dst->curve_data.totfollicles = follicles_len;
 
-	CustomData_copy(&hsys_src->pattern->fdata, &hsys_dst->pattern->fdata, mask, CD_CALLOC, follicles_len);
+	CustomData_copy(&hsys_src->curve_data.fdata, &hsys_dst->curve_data.fdata, mask, CD_CALLOC, follicles_len);
 	CustomData_copy(&hsys_src->curve_data.vdata, &hsys_dst->c

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list