Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-01-03 16:09:09 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-01-03 16:09:09 +0400
commitbf25f1ea96d01b513907cf3067e8e2dd3c7e41b4 (patch)
tree822c28fa6ecf5e08c051e5eb7a05f6bc6e2e8742 /intern/cycles/blender/blender_curves.cpp
parent57cf48e7c6fd04f864072c21433a822907774f78 (diff)
Cycles Hair: refactoring to store curves with the index of the first key and the
number of keys in the curve, rather than curve segments with the indices of two keys. ShaderData.segment now stores the segment number in the curve.
Diffstat (limited to 'intern/cycles/blender/blender_curves.cpp')
-rw-r--r--intern/cycles/blender/blender_curves.cpp28
1 files changed, 13 insertions, 15 deletions
diff --git a/intern/cycles/blender/blender_curves.cpp b/intern/cycles/blender/blender_curves.cpp
index 61628aae535..2e9a32f15f2 100644
--- a/intern/cycles/blender/blender_curves.cpp
+++ b/intern/cycles/blender/blender_curves.cpp
@@ -652,11 +652,10 @@ void ExportCurveTriangleGeometry(Mesh *mesh, ParticleCurveData *CData, int inter
void ExportCurveSegments(Mesh *mesh, ParticleCurveData *CData, int interpolation, int segments)
{
- int cks = 0;
- int curs = 0;
- int segs = 0;
+ int num_keys = 0;
+ int num_curves = 0;
- if(!(mesh->curve_segments.empty() && mesh->curve_keys.empty()))
+ if(!(mesh->curves.empty() && mesh->curve_keys.empty()))
return;
Attribute *attr_uv = mesh->curve_attributes.add(ATTR_STD_UV);
@@ -672,6 +671,8 @@ void ExportCurveSegments(Mesh *mesh, ParticleCurveData *CData, int interpolation
if(CData->curve_keynum[curve] <= 1)
continue;
+ size_t num_curve_keys = 0;
+
for( int curvekey = CData->curve_firstkey[curve]; curvekey < CData->curve_firstkey[curve] + CData->curve_keynum[curve] - 1; curvekey++) {
int subv = 1;
@@ -696,26 +697,23 @@ void ExportCurveSegments(Mesh *mesh, ParticleCurveData *CData, int interpolation
mesh->add_curve_key(ickey_loc, radius);
attr_intercept->add(time);
- if(subv != 0) {
- attr_uv->add(CData->curve_uv[curve]);
- mesh->add_curve_segment(cks - 1, cks, CData->psys_shader[sys], curs);
- segs++;
- }
-
- cks++;
+ num_curve_keys++;
}
}
- curs++;
+ mesh->add_curve(num_keys, num_curve_keys, CData->psys_shader[sys]);
+ attr_uv->add(CData->curve_uv[curve]);
+ num_keys += num_curve_keys;
+ num_curves++;
}
}
/* check allocation*/
- if((mesh->curve_keys.size() != cks) || (mesh->curve_segments.size() != segs)) {
+ if((mesh->curve_keys.size() != num_keys) || (mesh->curves.size() != num_curves)) {
/* allocation failed -> clear data */
mesh->curve_keys.clear();
- mesh->curve_segments.clear();
+ mesh->curves.clear();
mesh->curve_attributes.clear();
}
}
@@ -824,7 +822,7 @@ void BlenderSync::sync_curves(Mesh *mesh, BL::Mesh b_mesh, BL::Object b_ob, bool
{
/* Clear stored curve data */
mesh->curve_keys.clear();
- mesh->curve_segments.clear();
+ mesh->curves.clear();
mesh->curve_attributes.clear();
/* obtain general settings */