[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47371] trunk/blender/intern/itasc/kdl: Fix Eigen3 unaligned array in iTaSC.

Benoit Bolsee benoit.bolsee at online.be
Sun Jun 3 14:00:51 CEST 2012


Revision: 47371
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47371
Author:   ben2610
Date:     2012-06-03 12:00:41 +0000 (Sun, 03 Jun 2012)
Log Message:
-----------
Fix Eigen3 unaligned array in iTaSC. The unaligned array cause crash when SSE2 is enabled. The source of unaligned array were: matrix passing by value in std::make_pair() and offset of matrix member in structure.

Modified Paths:
--------------
    trunk/blender/intern/itasc/kdl/segment.hpp
    trunk/blender/intern/itasc/kdl/tree.cpp
    trunk/blender/intern/itasc/kdl/tree.hpp

Modified: trunk/blender/intern/itasc/kdl/segment.hpp
===================================================================
--- trunk/blender/intern/itasc/kdl/segment.hpp	2012-06-03 11:16:13 UTC (rev 47370)
+++ trunk/blender/intern/itasc/kdl/segment.hpp	2012-06-03 12:00:41 UTC (rev 47371)
@@ -46,8 +46,8 @@
     class Segment {
         friend class Chain;
     private:
+        Inertia M;
         Joint joint;
-        Inertia M;
         Frame f_tip;
 
     public:

Modified: trunk/blender/intern/itasc/kdl/tree.cpp
===================================================================
--- trunk/blender/intern/itasc/kdl/tree.cpp	2012-06-03 11:16:13 UTC (rev 47370)
+++ trunk/blender/intern/itasc/kdl/tree.cpp	2012-06-03 12:00:41 UTC (rev 47371)
@@ -29,15 +29,18 @@
 
 Tree::Tree() :
     nrOfJoints(0), nrOfSegments(0) {
-    segments.insert(make_pair("root", TreeElement::Root()));
+	TreeElement root;
+	std::pair<std::string, TreeElement> val("root", root);
+    segments.insert(val);
 }
 
 Tree::Tree(const Tree& in) {
     segments.clear();
     nrOfSegments = 0;
     nrOfJoints = 0;
-
-    segments.insert(make_pair("root", TreeElement::Root()));
+	TreeElement root;
+	std::pair<std::string, TreeElement> val("root", root);
+    segments.insert(val);
     this->addTree(in, "", "root");
 
 }
@@ -46,8 +49,9 @@
     segments.clear();
     nrOfSegments = 0;
     nrOfJoints = 0;
-
-    segments.insert(make_pair("root", TreeElement::Root()));
+	TreeElement root;
+	std::pair<std::string, TreeElement> val("root", root);
+    segments.insert(val);
     this->addTree(in, "", "root");
     return *this;
 }
@@ -60,8 +64,10 @@
         return false;
     pair<SegmentMap::iterator, bool> retval;
     //insert new element
-    retval = segments.insert(make_pair(segment_name, TreeElement(segment,
-            parent, nrOfJoints)));
+	TreeElement elem(segment, parent, nrOfJoints);
+	std::pair<std::string, TreeElement> val(segment_name, elem);
+
+    retval = segments.insert(val);
     //check if insertion succeeded
     if (!retval.second)
         return false;

Modified: trunk/blender/intern/itasc/kdl/tree.hpp
===================================================================
--- trunk/blender/intern/itasc/kdl/tree.hpp	2012-06-03 11:16:13 UTC (rev 47370)
+++ trunk/blender/intern/itasc/kdl/tree.hpp	2012-06-03 12:00:41 UTC (rev 47371)
@@ -43,7 +43,7 @@
 #endif
     class TreeElement
     {
-    private:
+    public:
         TreeElement():q_nr(0)
         {};
     public:




More information about the Bf-blender-cvs mailing list