diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-01-03 16:09:09 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-01-03 16:09:09 +0400 |
commit | bf25f1ea96d01b513907cf3067e8e2dd3c7e41b4 (patch) | |
tree | 822c28fa6ecf5e08c051e5eb7a05f6bc6e2e8742 /intern/cycles/blender/blender_curves.cpp | |
parent | 57cf48e7c6fd04f864072c21433a822907774f78 (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.cpp | 28 |
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 */ |