[Bf-blender-cvs] [813a656] strand_gpu: Fix crashes when generating fibers without any control curves present.
Lukas Tönne
noreply at git.blender.org
Wed Jul 13 18:39:10 CEST 2016
Commit: 813a6568aa2a638df13fb4529798764fcc57b28e
Author: Lukas Tönne
Date: Wed Jul 13 18:38:35 2016 +0200
Branches: strand_gpu
https://developer.blender.org/rB813a6568aa2a638df13fb4529798764fcc57b28e
Fix crashes when generating fibers without any control curves present.
===================================================================
M source/blender/blenkernel/intern/strands.c
M source/blender/gpu/intern/gpu_buffers.c
===================================================================
diff --git a/source/blender/blenkernel/intern/strands.c b/source/blender/blenkernel/intern/strands.c
index 543f0d9..9a8c603 100644
--- a/source/blender/blenkernel/intern/strands.c
+++ b/source/blender/blenkernel/intern/strands.c
@@ -488,6 +488,9 @@ static void strand_calc_root_distance(StrandFiber *fiber, const float loc[3], co
static void strands_calc_weights(const Strands *strands, struct DerivedMesh *scalp, StrandFiber *fibers, int num_fibers)
{
+ if (strands->totcurves == 0)
+ return;
+
float (*strandloc)[3] = MEM_mallocN(sizeof(float) * 3 * strands->totcurves, "strand locations");
KDTree *tree = BLI_kdtree_new(strands->totcurves);
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 5f52e55..279fcd1 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -2421,7 +2421,7 @@ static int strands_fiber_length(StrandFiber *fiber, StrandCurve *curves, unsigne
fnumverts += fiber->control_weight[k] * (float)curves[index].num_verts;
}
UNUSED_VARS(totcurves);
- int orig_num_verts = (int)ceil(fnumverts);
+ int orig_num_verts = max_ii((int)ceil(fnumverts), 2);
return BKE_strand_curve_cache_size(orig_num_verts, subdiv);
}
@@ -2454,7 +2454,7 @@ static int editstrands_fiber_length(StrandFiber *fiber, BMStrandCurve *curves, i
fnumverts += fiber->control_weight[k] * (float)curves[index].num_verts;
}
UNUSED_VARS(totcurves);
- int orig_num_verts = (int)ceil(fnumverts);
+ int orig_num_verts = max_ii((int)ceil(fnumverts), 2);
return BKE_strand_curve_cache_size(orig_num_verts, subdiv);
}
More information about the Bf-blender-cvs
mailing list