[Bf-blender-cvs] [2b1cb59a96a] hair_object: Remove hair data arrays for verts/curves/follicles and use customdata instead.
Lukas Tönne
noreply at git.blender.org
Sun Nov 25 12:05:06 CET 2018
Commit: 2b1cb59a96ab523d59a831b01151a4e8092e7053
Author: Lukas Tönne
Date: Sun Nov 25 11:03:44 2018 +0000
Branches: hair_object
https://developer.blender.org/rB2b1cb59a96ab523d59a831b01151a4e8092e7053
Remove hair data arrays for verts/curves/follicles and use customdata instead.
This disables a bunch of topology-changing functions which will need to be replaced/removed.
===================================================================
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_test.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 bbdeefc3cf4..c167c025b16 100644
--- a/source/blender/blenkernel/BKE_hair.h
+++ b/source/blender/blenkernel/BKE_hair.h
@@ -78,6 +78,11 @@ void BKE_hair_curve_data_init(struct HairCurveData *data);
void BKE_hair_curve_data_free(struct HairCurveData *data);
void BKE_hair_curve_data_copy(struct HairCurveData *dst_data, const struct HairCurveData *src_data, int flag);
+/* Base data layers */
+struct HairFiberVertex* BKE_hair_get_verts(const struct HairCurveData *data);
+struct HairFiberCurve* BKE_hair_get_curves(const struct HairCurveData *data);
+struct HairFollicle* BKE_hair_get_follicles(const struct HairCurveData *data);
+
/* === Scalp object === */
/* Find the mesh used as the scalp surface */
@@ -91,6 +96,7 @@ struct Object* BKE_hair_get_scalp_object(
const struct Object *ob,
const struct HairSystem *hsys);
+#if 0
/* === Fiber curves === */
/* Allocate buffers for defining fiber curves
@@ -129,11 +135,12 @@ void BKE_hair_set_fiber_curves(struct HairSystem *hsys, struct HairCurveData *cu
/* Remove all fiber curves.
*/
void BKE_hair_clear_fiber_curves(struct HairSystem *hsys);
+#endif
/* === Follicles === */
/* Calculate surface area of a scalp mesh */
-float BKE_hair_calc_surface_area(const struct Mesh *scalp);
+float BKE_hair7_calc_surface_area(const struct Mesh *scalp);
/* Calculate a density value based on surface area and sample count */
float BKE_hair_calc_density_from_count(float area, int count);
@@ -145,6 +152,7 @@ float BKE_hair_calc_density_from_min_distance(float min_distance);
/* Calculate a minimum distance based on density */
float BKE_hair_calc_min_distance_from_density(float density);
+#if 0
/* Distribute hair follicles on a scalp mesh */
void BKE_hair_generate_follicles(
struct HairSystem* hsys,
@@ -161,6 +169,7 @@ void BKE_hair_generate_follicles_ex(
unsigned int seed,
int count,
const float *loop_weights);
+#endif
/* === Draw Settings === */
diff --git a/source/blender/blenkernel/BKE_hair_iterators.h b/source/blender/blenkernel/BKE_hair_iterators.h
index 8f67b4a0b0b..769102ca920 100644
--- a/source/blender/blenkernel/BKE_hair_iterators.h
+++ b/source/blender/blenkernel/BKE_hair_iterators.h
@@ -89,8 +89,8 @@ typedef struct HairIterator
BLI_INLINE HairFiberCurve* BKE_hair_iter__curves_init(HairIterator *iter, const HairCurveData *curve_data)
{
- iter->data.curves.last = curve_data->curves + curve_data->totcurves;
- iter->data.curves.curve = curve_data->curves;
+ iter->data.curves.last = BKE_hair_get_curves(curve_data) + curve_data->totcurves;
+ iter->data.curves.curve = BKE_hair_get_curves(curve_data);
return iter->data.curves.curve;
}
@@ -109,8 +109,8 @@ BLI_INLINE HairFiberCurve* BKE_hair_iter__curves_next(HairIterator *iter)
BLI_INLINE HairFiberVertex* BKE_hair_iter__verts_init(HairIterator *iter, const HairCurveData *curve_data)
{
- iter->data.verts.last = curve_data->verts + curve_data->totverts;
- iter->data.verts.vertex = curve_data->verts;
+ iter->data.verts.last = BKE_hair_get_verts(curve_data) + curve_data->totverts;
+ iter->data.verts.vertex = BKE_hair_get_verts(curve_data);
return iter->data.verts.vertex;
}
@@ -129,8 +129,8 @@ BLI_INLINE HairFiberVertex* BKE_hair_iter__verts_next(HairIterator *iter)
BLI_INLINE HairFollicle* BKE_hair_iter__follicles_init(HairIterator *iter, const HairCurveData *curve_data)
{
- iter->data.follicles.last = curve_data->follicles + curve_data->totfollicles;
- iter->data.follicles.follicle = curve_data->follicles;
+ iter->data.follicles.last = BKE_hair_get_follicles(curve_data) + curve_data->totfollicles;
+ iter->data.follicles.follicle = BKE_hair_get_follicles(curve_data);
return iter->data.follicles.follicle;
}
@@ -151,10 +151,10 @@ BLI_INLINE HairFollicle* BKE_hair_iter__follicle_curves_init(HairIterator *iter,
{
HairIter__follicle_curves *intern = &iter->data.follicle_curves;
- intern->last = curve_data->follicles + curve_data->totfollicles;
- intern->curves_array = curve_data->curves;
+ intern->last = BKE_hair_get_follicles(curve_data) + curve_data->totfollicles;
+ intern->curves_array = BKE_hair_get_curves(curve_data);
- intern->follicle = curve_data->follicles;
+ intern->follicle = BKE_hair_get_follicles(curve_data);
while (intern->follicle != intern->last) {
if (intern->follicle->curve != HAIR_CURVE_INDEX_NONE) {
intern->curve = &intern->curves_array[intern->follicle->curve];
@@ -193,8 +193,8 @@ BLI_INLINE HairFiberVertex* BKE_hair_iter__curve_verts_init(HairIterator *iter,
{
HairIter__curve_verts *intern = &iter->data.curve_verts;
- intern->last = &curve_data->verts[curve->vertstart + curve->numverts];
- intern->vertex = &curve_data->verts[curve->vertstart];
+ intern->last = &BKE_hair_get_verts(curve_data)[curve->vertstart + curve->numverts];
+ intern->vertex = &BKE_hair_get_verts(curve_data)[curve->vertstart];
return intern->vertex;
}
diff --git a/source/blender/blenkernel/intern/hair.c b/source/blender/blenkernel/intern/hair.c
index d1b5cefddc3..7f1ed9309d3 100644
--- a/source/blender/blenkernel/intern/hair.c
+++ b/source/blender/blenkernel/intern/hair.c
@@ -94,9 +94,6 @@ void BKE_hair_curve_data_init(HairCurveData *data)
/* Does not free the data pointer itself! */
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);
@@ -104,16 +101,6 @@ void BKE_hair_curve_data_free(HairCurveData *data)
void BKE_hair_curve_data_copy(HairCurveData *dst_data, const HairCurveData *src_data, int flag)
{
- if (src_data->curves) {
- dst_data->curves = MEM_dupallocN(src_data->curves);
- }
- 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;
@@ -182,6 +169,21 @@ HairSystem *BKE_hair_copy(Main *bmain, const HairSystem *hsys)
return hsys_copy;
}
+HairFiberVertex* BKE_hair_get_verts(const HairCurveData *data)
+{
+ return CustomData_get_layer(&data->vdata, CD_HAIRVERT);
+}
+
+HairFiberCurve* BKE_hair_get_curves(const HairCurveData *data)
+{
+ return CustomData_get_layer(&data->cdata, CD_HAIRCURVE);
+}
+
+HairFollicle* BKE_hair_get_follicles(const HairCurveData *data)
+{
+ return CustomData_get_layer(&data->fdata, CD_HAIRFOLLICLE);
+}
+
/* Custom data layer functions; those assume that totXXX are set correctly. */
static void hair_ensure_cdlayers_primary(HairCurveData *data)
{
@@ -291,7 +293,7 @@ bool BKE_hair_minmax(HairSystem *hsys, float min[3], float max[3])
return false;
}
- HairFiberVertex *vert = hsys->curve_data.verts;
+ const HairFiberVertex *vert = BKE_hair_get_verts(&hsys->curve_data);
for (int i = 0; i < hsys->curve_data.totverts; ++i) {
minmax_v3v3_v3(min, max, vert->co);
}
@@ -409,6 +411,7 @@ float BKE_hair_calc_min_distance_from_density(float density)
return density > 0.0f ? sqrt(max_factor / density) : 0.0f;
}
+#if 0
/* Distribute hair follicles on a scalp mesh */
void BKE_hair_generate_follicles(
HairSystem* hsys,
@@ -458,9 +461,11 @@ void BKE_hair_generate_follicles_ex(
BKE_hair_batch_cache_dirty(hsys, BKE_HAIR_BATCH_DIRTY_ALL);
}
+#endif
/* ================================= */
+#if 0
void BKE_hair_fiber_curves_begin(HairSystem *hsys, int totcurves)
{
if (totcurves != hsys->curve_data.totcurves)
@@ -565,6 +570,7 @@ void BKE_hair_clear_fiber_curves(HairSystem *hsys)
BKE_hair_batch_cache_dirty(hsys, BKE_HAIR_BATCH_DIRTY_ALL);
}
+#endif
/* === Depsgraph evaluation === */
@@ -611,7 +617,7 @@ void BKE_hair_ensure_follicle_space(const Mesh *scalp, HairCurveData *curve_data
float (*co)[3] = orco;
float (*nor)[3] = normals;
float (*tang)[3] = tangents;
- HairFollicle *follicle = curve_data->follicles;
+ const HairFollicle *follicle = BKE_hair_get_follicles(curve_data);
for (int i = 0; i < num_follicles; ++i) {
BKE_mesh_sample_eval(scalp, &follicle->mesh_sample, co, nor, tang);
@@ -846,24 +852,25 @@ int BKE_hair_export_cache_update(HairExportCache *cache, const HairSystem *hsys,
cache->fiber_tangents = MEM_reallocN_id(cache->fiber_tangents, sizeof(float[3]) * totverts, "hair export tangents");
cache->fiber_normals = MEM_reallocN_id(cache->fiber_normals, sizeof(float[3]) * totverts, "hair export normals");
+ const HairFiberVertex *verts_orig = BKE_hair_get_verts(&hsys->curve_data);
HairFiberCurve *curve_orig;
HairIterator iter;
int i;
BKE_HAIR_ITER_CURVES_INDEX(curve_orig, &iter, &hsys->curve_data, i) {
- const HairFiberVertex *verts_orig = &hsys->curve_data.verts[curve_orig->vertstart];
+ const HairFiberVertex *curve_verts_orig = &verts_orig[curve_orig->vertstart];
const HairFiberCurve *curve = &cache->fiber_curves[i];
HairFiberVertex *verts = &cache->fiber_verts[curve->vertstart];
float (*tangents)[3] = &cache->fiber_tangents[curve->vertstart];
float (*normals)[3] = &cache->fiber_normals[curve->vertstart];
- hair_curve_subdivide(curve_orig, verts_orig, subdiv, verts);
+ hair_curve_subdivide(curve_orig, curve_verts_orig, subdiv, verts);
hair_curve_calc_vectors(verts, curve->numverts, tangents, normals);
}
}
if (data & HAIR_EXPORT_FOLLICLE_BINDING) {
- cache->follicles = hsys->curve_data.follicles;
+ cache->follicles = BKE_hair_get_follicles(&hsys->curve_data);
cache->totfollicles = hsys->curve_data.totfollicles;
}
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 9aa42401c5c..da9d9449558 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -8426,9 +8426,6 @@ static void direct_link_hair(FileData *fd, HairSystem* hsys)
hsys->adt= newdataadr(fd, hsys->adt);
direct_link_animdata(fd, h
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list