Fixed: Three corrections by Tilmann
[ode.git] / CHANGELOG.txt
blobdf208f02a7a544ee40cc2c68e934bf7d199ea886
1 ODE CHANGELOG
2 -------------
4 the rules for this file:
5   * entries are sorted newest-first.
6   * summarize sets of changes - dont reproduce every CVS log comment here.
7   * don't ever delete anything.
8   * keep the format consistent (79 char width, M/D/Y date format).
10 ------------------------------------------------------------------------------
11 06/24/2023 Oleh Derevenko (by Tilmann)
12         * Fixed a missing break in a switch statement in demo_jointPU.cpp while
13           handling gravity switching request.
14         * Fixed wrong face index being returned in convex-trimesh libCCD 
15           collision check routine.
16         * Fixed use of potentially outdated AABBs in GIIMPACT cylinder-trimesh
17           collision check routine.
19 11/08/2020 Steve Peters
20         * dGeomBoxPointDepth implementation was fixed for locations outside of
21           the box.
23 10/16/2020 Oleh Derevenko
24         * A fault on method call from within Joint class destructor in Python
25           bindings fixed (by Tyler Limkemann)
27 07/28/2020 Oleh Derevenko
28         * A threaded job data race fixed on job release (issue #70). 
29           The bug could cause writes to functions's stack area after 
30           the function returned and World simulation errors not being reported
31           with the function result if the simulation failed.
33 05/11/2020 Oleh Derevenko
34         * GIMPACT math macros were changed to use standard floating point math
35           rather than custom "optimized" implementations.
37 02/19/2020 Oleh Derevenko
38         * libCCD configuration description strings have been added for 
39           use with dGetConfiguration() and dCheckConfiguration().
41 03/06/2019 Oleh Derevenko
42         * dWorldAttachQuickStepDynamicIterationStatisticsSink public function 
43           was added to allow dynamic step count adjustment monitoring for
44           world instances.
46 02/21/2019 Oleh Derevenko
47         * Dynamic step count adjustment was implemented for dWorldQuickStep
48           with dWorldSetQuickStepDynamicIterationParameters and 
49           dWorldGetQuickStepDynamicIterationParameters new API functions
50           to control the feature.
51           The solver estimates per body resulting contact force maximal 
52           absolute adjustment value and may exit after fewer iterations if
53           the adjustments get smaller than the given threshold, or iterate 
54           longer if the adjustments are still significant after the default
55           iteration count is executed.
57 01/20/2019 Oleh Derevenko
58         * x86 targets have been changed to generate SSE2 code for calculations
59           by default with possibility to explicitly configure back for FPU.
61 11/12/2018 Oleh Derevenko
62         * The commentary from 11/05/2018 was wrong. The constraints were not
63           reset to their natural order and remained randomized.
64           The other thing that was missing was full contraint reorder without 
65           separation into independent and dependent ones. The algorithm doesn't
66           converge without it well.
68 11/10/2018 Oleh Derevenko
69         * An incorrect optimization to Jacobian Copy building code from #1938
70           that resulted in corrupt data in multi-threaded execution mode was 
71           fixed.
73 11/05/2018 Oleh Derevenko
74         * An unintended change from commit #1898 has been reverted.
75           The QuickStep used to solve with randomized constraint order 
76           each 8th iteration. The other iterations, the constraints 
77           were reset to their natural order, as generated, with the dependent
78           constraints gathered in reverse order at end (the reverse order is 
79           somehow important). With the commit #1898 the constraints were
80           randomly reordered each 8th iteration but then remained 
81           in that randomized order and only were re-randomized on subsequent
82           multiples of 8.
84 10/09/2017 Markus Rickert
85         * CMake support for project file generation has been added.
87 06/14/2017 Oleh Derevenko
88         * dxHashSpace::collide() has been changed to fault host program 
89           if scene gets too large and causes integer overflow.
91 06/06/2017 Oleh Derevenko
92         * Memory and pointer size integer type use has been changed so that 
93           internal typedefs are used instead of "_t" suffixed types.
95 05/09/2017 Oleh Derevenko
96         * Introduction of cooperative algorithms API. 
97           L*D*LT cooperative factorization and linear equation system 
98           cooperative solving have been implemented.
99         * AtomicReadReorderBarrier, AtomicStore, AtomicStorePointer functions 
100           have been added and some atomic function implementations have been 
101           improved in OU.
103 02/20/2017 Oleh Derevenko
104         * Project generation options have been changed to have built-in
105           multithreaded threading implementation enabled by default.
107 02/19/2017 Oleh Derevenko
108         * dWorldStep threaded implementation has been extended to the final 
109           steps of constraint force applications and body position updates
110           after the LCP solving. Note that body callbacks (if set) may be
111           called from multiple threads if threaded execution is enabled.
112         * OU atomicord32 type has been fixed to be unsigned on all supported
113           platforms.
115 01/09/2017 Oleh Derevenko
116         * dGeomTriMeshDataPreprocess2() public function has been added to 
117           replace dGeomTriMeshDataPreprocess(). Face angles pre-computation
118           for triangle meshes has been implemented.
120 11/13/2016 Oleh Derevenko
121         * dGeomTriMeshDataGetBuff and dGeomTriMeshDataSetBuff have been marked 
122           deprecated and their functionality implemented via 
123           dGeomTriMeshDataGet and dGeomTriMeshDataSet. Extra function variant
124           dGeomTriMeshDataGet2() has been added to allow returning data size.
126 11/07/2016 Oleh Derevenko
127         * The implementation of OPCODE TriMesh data pre-processing 
128           (dGeomTriMeshDataPreprocess()) has been optimized to only contain
129           a sort and a single pass over edges (used to be a sort and O(N^2)).
131 10/29/2016 Oleh Derevenko
132         * dGeomTriMeshDataPreprocess() public function has been changed to 
133           return a boolean status (it can fail in low memory conditions).
135 07/10/2016 Oleh Derevenko
136         * The correct handling of dJOINT_REVERSE mode for AngularMotor Joint 
137           implemented (issue #37).
139 06/29/2016 Oleh Derevenko
140         * A bug fixed with HashSpace calling big boxes collision twice 
141           (both straight and reverse geometries order) since revision #1831.
143 06/03/2016 Oleh Derevenko
144         * dJointSetHinge2Axes public function has been added and 
145           dJointSetHinge2Axis1/2 have been marked deprecated due to being 
146           unsafe.
148 05/13/2016 Oleh Derevenko
149         * ICE Container class allocation strategy fixed to avoid reserving 
150           excess memory with large collections.
152 05/10/2016 Oleh Derevenko
153         * dSafeNormalize3 and dSafeNormalize4 functions changed to leave the
154           parameter intact instead of replacing it with the X-axis unit in case 
155           of fault.
157 04/12/2016 Oleh Derevenko
158         * A function to create a self-threaded threading implementation object
159           has been moved back to public headers as there could be a use for it
160           while running several worlds in parallel threads.
162 01/09/2016 Oleh Derevenko
163         * Hinge2 joint corected to avoid faulting asserts when the axes get 
164           temporarily invalid during assignments (suggested by David Mansolino)
166 01/03/2016 Oleh Derevenko
167         * An invalid memory access fixed in dxSAPSpace::BoxPruning() in case
168           if there were NaN values in AABBs to be sorted.
170 12/25/2015 Oleh Derevenko
171         * Unexpected joint mode assignment (instead of comparison) fixed within
172           an dUASSERT in dJointSetTransmissionAxis2() of transmission joint
174 11/28/2015 Oleh Derevenko
175         * Convex-Trimesh collider added (libccd+GIMPACT only)(by Piotr Piastucki)
176         * dCreateConvex() and dGeomSetConvex() public APIs changed to expect 
177           their parameter arrays as const pointers
179 11/01/2015 Oleh Derevenko
180         * OPCODE mesh colliders' input coordinates have been offset to  
181           mesh-relative frames to decrease potential computational errors
182           (suggested by luckytrashsc2@g***l.com)
184 08/05/2015 Oleh Derevenko
185         * Implemented change to return highest depth contacts subset for GIMPACT 
186           in cases if contacts count exceeds requested maximum (as suggested in 
187           the issue #36 by Piotr Piastucki)
189 11/17/2014 Daniel K. O.
190         * Added support for using libccd from the system (if found via
191           pkg-config)
193 11/10/2014 Oleh Derevenko
194         * Floating point division by zero in capsule-ray collision routine 
195           in case if the ray axis was parallel the cylinder and the ray started
196           from within it fixed (issue #26)
198 11/08/2014 Oleh Derevenko
199         * Threading support has been extended to complete implementation 
200           of QuickStep
202 10/29/2014 Daniel K. O.
203         * Added dJointSetDBallDistance
205 10/19/2014 Oleh Derevenko
206         * Built-in threading implementation compilation fixed for OSX
207           (clock_gettime() is missing from the system - reported by Bram)
209 08/10/2014 Oleh Derevenko
210         * Declarations of dWorld[Get/Set]AutoDisableLinearAverageThreshold and
211           dWorld[Get/Set]AutoDisableAngularAverageThreshold have been removed 
212           from public headers (were orphaned since rev.1052)
214 07/16/2014 Oleh Derevenko
215         * Two fixes by Francesco Cat applied (fixes for mistakes made during
216           code style improvements in the past)
217                  
218 02/27/14 Daniel K. O.
219         * Added dODE_VERSION macro to public headers (issue #24).
221 02/11/14 Daniel K. O.
222         * Added dJointGetHinge2Angle2 (issue #12).
224 02/07/14 Daniel K. O.
225         * Added dWorldSetData/dWorldGetData (issue #21).
227 01/31/14 Daniel K. O.
228         * Applied patch #185: Stable, implicit gyroscopic forces.
230 01/27/14 Daniel K. O.
231         * Fixed cylinder AABB computation.
233 01/25/14 Daniel K. O.
234         * Removed ALLOCA calls from dHashSpace; it should not depend
235           on stack size limits anymore.
237 12/06/13 Daniel K. O.
238         * Applied patch #181: fix some bugs in AMotor joint.
239         * Applied patch #186: fix some bugs in PU joint.
240         * Applied patch #182: Transmission joint.
241         * Applied patch #184: implement rolling friction for contacts.
243 08/08/13 Oleh Derevenko
244         * Joint feedback forces application fixed in QuickStep implementation
245           (was broken since revision #1919 in old repository (#1927 in new one))
247 08/04/13 Oleh Derevenko
248         * Bugfix #89 by Luc applied (dJointAddSliderForce() adds a zero force
249           when the parent body is NULL) 
251 05/18/13 Oleh Derevenko
252         * OU library has been included in ODE at revision #46 instead of  
253           being used as an external link due to difficulties using external 
254           references with new protocol used for storage at SF.
256 03/03/13 Oleh Derevenko
257         * Fixed issue with "findex==-1" constraints being intermixed with 
258           "findex!=-1" ones during constraints random reordering in QuickStep.
260 02/03/13 Oleh Derevenko
261         * [u]int[8/16/32] renamed to contain "d" prefix so that global namespace
262           was not polluted with these names unconditionally. 
263           If your project depended on these types other than just for passing 
264           parameters to ODE calls, add similar typedefs for yourself in some 
265           of your project's global headers.
267 01/02/13 Oleh Derevenko
268         * Applied patch #183 by Joseph Cooper (complementary matrix 
269           calculation fix).
271 12/28/12 Oleh Derevenko
272         * A bug with heightfield data assigned to a wrong field in 
273           dGeomHeightfieldSetHeightfieldData fixed (bug report #88 by Luc).
275 12/18/12 Oleh Derevenko
276         * Fixed issue with some kinds of joints (Ball, DBall, DHinge, Fixed)
277           might overwrite world ERP value with their custom ERP during 
278           getInfo2() call and that inappropriate value would then be passed 
279           to subsequent joints in solver instead of world ERP.
281 12/01/12 Oleh Derevenko
282         * Fixed issues reported in patches #151 and #22 (collisions with
283           SAPSpace and QuadTreeSpace might not work because geometries list
284           was misused in them).
285         * Applied patch #160 "IsPointInPolygon in convex.cpp returns wrong 
286           results" (by Janis Rucis)
288 11/25/12 Oleh Derevenko
289         * Configuration option --disable-threading-intf added 
290           (--no-threading-intf for Windows/Premake). This allows disabling
291           threading interface support (external implementations may not be 
292           assigned) but eliminates dependency on OU and use of atomics in 
293           steppers.
295 11/05/12 Oleh Derevenko
296         * Fixed zero comparisons in OPCODE to use relative error instead of
297           absolute epsilon value (found by Bill Sellers)
299 06/08/12 Daniel K. O.
300         * Removed the need for defining dSINGLE/dDOUBLE; this is stored now in
301           the generated ode/precision.h header.
302         * Some code cleanup to get rid of GCC warnings.
304 05/30/12 Daniel K. O.
305         * Made drawstuff draw shadows for lines.
306         * Fixed dhinge's last constraint to properly handle rotations.
308 05/03/12 Daniel K. O.
309         * Added two new joints: Double Ball and Double Hinge.
311 04/22/12 Daniel K. O.
312         * Fixed plane2d joint: uninitialized variables (reported by Dimitris
313           Papavasiliou)
315 04/14/12 Oleh Derevenko
316         * Assertion checking macros moved into library private headers.
318 04/13/12 Daniel K. O.
319         * Applied patch from bug  #3431829 - better handling of capsule-box with
320           deep penetrations.
321         * Fixed zero-mu issues: now either mu or mu2 can be set to zero.
323 03/17/12 Oleh Derevenko
324         * Threaded execution support interface added. Optional built-in threading
325           implementation added.
326           Internal threading implementation is excluded by default and to be used, 
327           it must be enabled with configure/premake.
328           At present, if threading interface is assigned to a world, island 
329           selection and stepping is performed in multiple threads (one thread per 
330           island).
332 03/12/12 Oleh Derevenko
333         * PURE_INLINE macro renamed to ODE_PURE_INLINE and definition of 
334           dNextAfter()/dCopySign() corrected to avoid creating conflicts with 
335           other libraries.
337 02/03/12 Oleh Derevenko
338         * Assertion checking macros moved from common.h to error.h
340 12/18/11 Oleh Derevenko
341         * dIVERIFY macro added (same as dIASSERT in debug mode but evaluates its
342           expression in release mode) to be used to assert variable value 
343           which is not used further in text while avoiding compiler warning.
344         * dICHECK macro added (same as dIASSERT but evaluates its expression and 
345           raises assertion fault regardless of compilation mode) to be used to
346           generate a fault in cases when error is very unlikely but must be 
347           handled and handling is very troublesome (e.g. failure to lock a mutex
348           due to lack of resources).
350 12/07/11 Oleh Derevenko
351         * Partially fixed size_t to integer conversion warnings
352         * Fixed type signedness and added casts to size_t wherever necessary 
353           in Step/QuickStep
355 11/04/11 Daniel K. O.
356         * Applied patch #3429454 - fix compilation on some platforms.
358 10/28/11 Daniel K. O.
359         * Fixed a box-capsule bug: more reasonable normal for deep penetrations
360           (contributed by Georg Martius.)
362 10/27/11 Daniel K. O.
363         * Disabled merging of contacts for trimesh-sphere by default.
364         * Added new demo: demo_tracks.
366 10/17/11 Daniel K. O.
367         * Added python bindings, contributed by Gideon Klompje.
368         * Updated some build scripts.
369         * Changed spheres distribution in demo_space_stress.
371 05/17/11 Oleh Derevenko
372         * A typo in step.cpp fixed (assignment operator in a conditional 
373           instead of comparison) (reported by Bram Stolk)
375 01/29/11 Oleh Derevenko
376         * Heightfield zone boundaries calculation code fixed to also consider
377           whole next cell after the AABB if the AABB ends exactly at the cell
378           boundary.
380 01/23/11 Daniel K. O.
381         * Applied patch from Daniel Fiser, add libccd collider for
382           box-cylinder.
384 01/20/11 Daniel K. O.
385         * Applied patch from Daniel Fiser, fix infinite loop in libccd caused
386           by numerical problems.
388 01/06/11 Daniel K. O.
389         * Applied patch from Daniel Fiser, efficient libccd tests when using
390           CONTACTS_UNIMPORTANT.
392 12/17/10 Daniel K. O.
393         * Applied patches from Daniel Fiser for new colliders based on libccd.
395 11/08/10 Daniel K. O.
396         * Applied patches from Daniel Fiser to incorporate libccd for
397           Cylinder-Cylinder collision tests.
399 08/21/10 Oleh Derevenko
400         * Fix applied to dxReallocateTemporayWorldProcessContext() to remove typo 
401           which caused segmentation fault (by Kyle McKay).
402           dTestSolveLCP() fixed to avoid exceeding allocated memory pool 
403           (by Kyle McKay).
405 07/19/10 Oleh Derevenko
406         * Patch applied (#3030783) to fix drawstuff dimensions being ignored
407           in OSX GLUT port (by Danny Price).
409          Daniel K. O.
410         * Applied patch #2991622: dGeomGetRelPointPos, dGeomGetPosRelPoint,
411           dGeomVectorToWorld, and dGeomVectorFromWorld.
413 07/16/10 Daniel K. O.
414         * Fixed bug #2937076: don't try to build demos if drawstuff is disabled.
416 05/02/10 Oleh Derevenko
417         * Missing extern "C" wrapper has been added to include/ode/export-dif.h
418           (reported by Danny Price). The change affects dWorldExportDIF() public 
419           function.
421 05/02/10 Oleh Derevenko
422         * Patch applied (#2995450) to generate up to four contacts for box-
423           plane collision test (by alexdu) and fix contact depths.
425 05/02/10 Oleh Derevenko
426         * dGeomLowLevelControl function added with ability to change/query OPCODE 
427           trimesh-sphere contact merging behavior at runtime.
429 02/18/10 Daniel K. O.
430         * Fixed bug affecting disabled joints and dWorldStep.
432 01/16/10 Oleh Derevenko
433         * Patch applied (#2931174) to make demos work for recent MacOS.
434         * Patch applied (#2931177) to fix the demos' framerate on X11.
436 12/20/09 Oleh Derevenko
437         * QuadTreeSpace implementation corrected to avoid object-block relation 
438           ambiguity due to numeric errors.
440 12/04/09 Oleh Derevenko
441         * odecpp classes changed to be inheritable and easily expandable
443 11/29/09 Oleh Derevenko
444         * Improvement for trimesh-plane collision (also used in trimesh-heightfield)
445           to exclude mesh vertices that have already generated contacts from further
446           examination and contact generation in other triangles (suggested by LR).
448 10/25/09 Oleh Derevenko
449         * Macros changed to static inline functions in odemath.h and related files.
450           Some code duplication has been eliminated across the files.
452         * Fixed handling of --disable-asserts and --enable-double-precision 
453           (absence of --enable-double-precision) in configure script. The script
454           was not appending compiler defines correctly.
456         * dWorldStep implementation changed to remove allocation on stack. 
457           dUSE_MALLOC_FOR_ALLOCA define has been removed as well as corresponding
458           configuration parameter. Also dMemoryFlag public variable has been removed.
459           (look for presence of ODE_EXT_malloc_not_alloca configuration string if
460           your application is dependent on that variable).
462 09/05/09 Oleh Derevenko
463         * dWorldStepFast1 API removed along with dWorld[Get/Set]AutoEnableDepthSF1
465 08/29/09 Oleh Derevenko
466         * Fixed uninitialized floating point array used in computations.
468 08/12/09 Oleh Derevenko
469         * A typo fixed in dGeomCopyOffsetRotation() (final_posr was used instead 
470           of offset_posr). Reported by Tilmann.
472 08/11/09 Daniel K. O.
473         * Made sure neither dSINGLE or dDOUBLE is defined by default; the user
474           should always explicitly specify the precision.
476 06/27/09 Oleh Derevenko
477         * New functions have been added:
478            - dWorldUseSharedWorkingMemory
479            - dWorldCleanupWorkingMemory
480            - dWorldSetStepMemoryReservationPolicy
481            - dWorldSetStepMemoryManager
482                 
483 06/25/09 Remi Ricard (papaDoc)
484         * Add limit to the to the second axis of the universal joint
485          for the pu joint.
487 06/14/09 Oleh Derevenko
488                 * dWorldQuickStep re-implemented to avoid memory allocation on stack.
489                   Also several optimizations have been made to decrease memory 
490                   requirements and optimize algorithm implementation of dWorldQuickStep.
491                   dWorldStep still remains with old memory allocation however new APIs
492                   mentioned below are fully functional for it.
493                   Both dWorldStep and dWorldQuickStep have been changed to return boolean
494                   success status.
496                 * dInitODE2() changed to automatically call 
497                   AllocateODEDataForThread(dAllocateFlagBasicData) after library 
498                   initialization as this is a required initialization minimum that
499                   must always be performed anyway.
501 06/05/09 Daniel K. O.
502          * Removed aliasing issues from OPCODE/Ice, plus some other warnings.
503            Now it builds on gcc 4.3.2 with '-Wall -Werror -O3".
505 05/30/09 Oleh Derevenko
506          * A minor memory usage optimization for QuickStep.
508 05/24/09 Daniel K. O.
509          * Made the new trimesh collider the default.
510          * Added a "-texturepath" option to drawstuff.
512 05/18/09 Oleh Derevenko
513         * Heightfield rotation fixed to avoid NaNs while rotating infinite
514           MIN/MAX heights.
516 05/03/09 Oleh Derevenko
517         * Incorrect parameter order fixed on contact merging in Sphere-Trimesh
518           collisions. The bug resulted in merged contact remaining with normal
519           of first contact found. Thanks to Dimitris Papavasiliou for reporting.
521 04/23/09 Daniel K. O.
522         * Fixed bug #2685170: use the C99 __func__ instead of __FUNCTION__ when
523           a C99 implementation is available.
525 04/07/09 Remi Ricard (papaDoc)
526         * Remove unused code in demo_joints.cpp, reported by Tilmann.
528 04/07/09 Remi Ricard (papaDoc)
529         * Fix bug in collision categories in demo_jointPU, reported by Tilmann
531 03/14/09 Oleh Derevenko
532         * A possibility to initialize/close ODE multiple times recursively has 
533           been added.
534           Also, now a call to dSpaceSetManualCleanup() is required for each 
535           space right after creation if ODE has been initialized in thread data
536           manual cleanup mode.
537            
538 03/07/09 Oleh Derevenko
539         * Thread local data has been cleaned up from OPCODE and OdeTls as it is
540           not used (OPC_SweepAndPrune.* and OPC_BoxPruning.* have been removed
541           - rebuilding project files is necessary).
543 02/07/09 Daniel K. O.
544         * New house of cards demo, which stresses the friction handling stability.
546 01/29/09 Remi Ricard (papaDoc)
547         * Fix bug: Fix problem when attaching no body to a joint. Before calling
548           setRelativeValues a check is made for bodies.
549         * Add unittest
551 01/28/09 Daniel K. O.
552         * Applied patch #2538046: Heightfield AABB bounds patch.
554 01/23/09 Remi Ricard (papaDoc)
555          * Add new function dJointSetUniversalAxis1Offset and dJointSetUniversalAxis2Offset
556          * Add unittest for those funcitons.
558 01/23/09 Remi Ricard (papaDoc)
559          * Fix problem with dJointGetUniversalAngle2 when the joint is attached to
560            only a body 2. The sign was inverted.
561          * Add unit test to verify for this problem
563 01/21/09 Remi Ricard (papaDoc)
564          * Fix bug reported by Tilman: dxJointPU::getInfo1 was setting twice the
565            limit of limot1 to zero and not limot2
567 01/17/09 Daniel K. O.
568         * Fixed a bug in dSpaceCollide2: if both geoms are not in spaces they would
569           not have valid AABBs.
571 12/20/08 Daniel K. O.
572         * New functions: dJointEnable, dJointDisable, dJointIsEnabled
573           (patch #2454764).
575 12/19/08 Daniel K. O.
576         * Removed inline asm statements that break builds on 64-bit VC++.
578 12/09/08 Daniel K. O.
579         * Applied patch #2381592, which adds support for Kinematic Bodies.
581 12/06/08 Oleh Derevenko
583        * Applied a patch by Martijn Buijs to make GIMPACT trimesh-ray collisions to
584          be consistent with those in OPCODE.
585        * Swapped geometries returned in contacts for OPCODE Trimesh-Plane collisions
586          as they were returned in unnatural order being different from that in GIMPACT
587        * Applied a patch by Martijn Buijs to make side1, side2 fields of contact 
588          structure be always initialized, either with -1 for non-trmesh geometries
589          or with triangle index for trimeshes. These fields were only assigned for
590          trimesh-trimesh collisions before.
591        * dGeomTriMeshSetTriMergeCallback/dGeomTriMeshGetTriMergeCallback API added
592          to set/get user defined callback procedure for trimeshes that would be 
593          invoked when contacts are merged to let user code accumulate attributes of
594          original contact triangles and generate a fake index by which it would 
595          later be able to determine those attributes. If the callback is not 
596          assigned (the default) -1 is generated as triangle index for merged 
597          contacts (there was an index of first of merged triangles before!!!).
598          The callback is currently used within OPCODE trimesh-sphere and OPCODE
599          new trimesh-trimesh collisions.
601 11/20/08 Remi Ricard (papaDoc)
602        * Fix problem with dJointGetPUPosition and
603          dJointGetPUPositionRate when the joint is attached to only
604          a body 2. The sign was inverted.
605        * Fix bug: When a pu joint had only one body attached to position 2,
606          dJointAttach(jId, 0, bId). The body was not push in the right direction to
607          move back between the limits.
608        * Add unit test to check the above problem
609        * Add the function void dJointSetPUAnchorOffset
610        * Make the function void dJointSetPUAnchorDelta deprecated
612 11/19/08 Remi Ricard (papaDoc)
613        * Fix bug: When a pr joint had only one body attached to position 2,
614          dJointAttach(jId, 0, bId). The body was not push in the right direction to
615          move back between the limits.
616        * Add unit test to check the above problem
618 11/19/08 Remi Ricard (papaDoc)
619         * Fix problem with dJointGetPRPosition and
620           dJointGetPRPositionRate when the joint is attached to only
621           a body 2. The sign was inverted.
622         * Add unit test to check the above problem
623         * Increase the tolerance to remove failure in unit test
624         * Remove compilation warning in unit test with the use of REAL()
626 11/18/08 Remi Ricard (papaDoc)
627        * Fix bug: When a piston joint had only one body attached to position 2,
628          dJointAttach(jId, 0, bId). The body was not push in the right direction to
629          move back between the limits.
630        * Add more functionality to demo_piston.cpp
631        * Run astyle on modified files.
633 11/18/08 Remi Ricard (papaDoc)
634         * Fix bug: When a slider joint had only one body attached to position 2,
635          dJointAttach(jId, 0, bId). The body was not push in the right direction to
636          move back between the limits.
638 10/29/08 Oleh Derevenko
640         * Premake scripts changed to only include chosen collision library
641           sources in project on Windows. --all-collis-libs premake option 
642           added to allow inclusion of all collision library sources into the 
643           project
645 10/15/08 Remi Ricard (papaDoc)
646         * Applying patch #2158425 64-bit GIMPACT provided by Mark
647           William. This patch enable GIMPACT to works on 64-bit machine.
649 10/15/08 Remi Ricard (papaDoc)
650         * Add function dJointGetPRAngle and dJointGetPRAngleRate
652 10/15/08 Remi Ricard (papaDoc)
653         * Enable the motor on the rotoide part of the PR joint
655 10/15/08 Remi Ricard (papaDoc)
656         * Add unit test to check if using directly a joint
657           or using after setting with default values is the same.
658         * Add function setRelativeValues called in dJointAttach for
659           all joints.
661 10/10/08 Remi Ricard (papaDoc)
662         * Fix bug in dJointGetPUAxis2. The axis was not multiplied with the
663           the rotation matrix of the good body.
664         * Fix bug if there is only one body on the PU joint the axis returned
665           was not the right one.
666         * Add unit test to verify previous bug.
668 10/03/08 Rodrigo Hernandez (Kwizatz)
669         * Added Blender script to create ODE convex geoms under tools.
671 10/01/08 Rodrigo Hernandez (Kwizatz)
672         * Convex-Convex collision detection code is finally stable.
674 08/31/08 Daniel K. O.
675         * Applied patch 2080674: Improved dBodySetRotation; now exact rotation
676           matrices are preserved until the next simulation step.
678 08/07/08 Daniel K. O.
679         * Fixed strict aliasing issue that was breaking the new trimesh collider.
681 07/24/08 Daniel K. O.
682         * New functions: dBodyGetGyroscopicMode and dBodySetGyroscopicMode
683           (patch #2019242).
685 07/15/08  Remi Ricard (papaDoc)
686         * Add a new define ODE_API_DEPRECATED to mark function as deprecated
687           when necessary.
689 07/14/08 Remi Ricard (papaDoc)
690         * Finish adding patch 1336066: Joint feedback in quickstep by jsinecky
691         * demo_boxstack.cpp can now print joint feedback
693 07/11/08 Daniel K. O.
694         * Bumped version for 0.10.1
695         * Added proper usage of libtool's version info.
697 07/10/08 Remi Ricard (papaDoc)
698         * Add new function dJointSetPistonAnchorOffset
699         * Add unittest for the piston joint
700         * Fix problem with dJointGetPistonPosition and 
701           dJointGetPistonPositionRate when the joint is attached to only
702           a body 2. The sign was inverted.
704 07/09/08 Remi Ricard (papaDoc)
705         * Optimize function Multiply1_12q1 in quickstep
706           Patch proposed by Riemer v.d. Zee and modified by Patrick Baggett
708 07/08/08 Remi Ricard (papaDoc)
709         * Update the slider joint to have the same behavior as the other joint
710           when there is only a body2 attached to it.
711         * Update documentation for the slider joint.
712         * Remove warning by using REAL()
713         * Add new unittest for dJointGetSliderPositionRate
715 07/08/08 Remi Ricard (papaDoc)
716         * Update unittest for the slider.
717         * Rename the new function dJointSetHingeAxisDelta to 
718           dJointSetHingeAxisOffset. This remove will remove confusion with 
719           the old function dJointSetHingeAnchorDelta
720         * Update documentation for the Hinge unittest
721         * Remove warning by using REAL()
723 07/07/08 Daniel K. O.
724         * Max Correcting Vel doesn't affect bounciness, as before.
726 07/03/08 Remi Ricard (papaDoc)
727         * Add new function dJointSetHingeAxisDelta
728         * Add unittest for this new function
730 06/17/08 Remi Ricard (papaDoc)
732         *  Move the computation of the Relative Rotation for the slider joint
733            into a function.
734         * Add unittest for to check qrel 
736 06/17/08 Remi Ricard (papaDoc)
738        * Remove unused variables. 
739        * Remove a conversion warning between unsigned int and int
740         
741 06/17/08 Remi Ricard (papaDoc)
743         * Move the function hingeComputeRelativeRotation as a member of 
744           the hinge structure/class.
746 06/17/08 Remi Ricard (papaDoc)
748         *  Move the computation of the Relative Rotation for the fixed joint
749            into a function.
751 06/16/08 Remi Ricard (papaDoc)
753         * Add testunit for the dxJointFixed
755 06/04/08 Daniel K. O.
757         * Moved joints to ode/src/joints, converted them to true virtual
758           methods.
760 06/02/08 Daniel K. O.
762         * Added an Auto<T> template to step.cpp to handle memory deallocation.
764 05/09/08 Daniel K. O.
766         * Applied patch #1335202: Contact Joint Motion (with some corrections),
767           and added demo_motion.
769 05/01/08 Oleh Derevenko
771         * Memory leak in GIMPACT fixed (reported by Derek)
773 04/28/08 Oleh Derevenko
775         * Added possibility to collide a space of lower sublevel as a geometry
776           against another space of a higher level with dSpaceCollide2.
777           dSpaceSetSublevel/dSpaceGetSublevel are used for sublevel assignment/
778           retrieval.
780 04/27/08 Oleh Derevenko
782         * Fixed incorrect memory copying which could lead to memory corruption
783           in GIMPACT (luckily, in unused code)
784         * Fixed possible memory read beyond the end of allocated buffer along
785           with unnecessary extra memory copying in GIMPACT.
786         * Fixed buffer reserve being incorrectly reset to zero for bitsets 
787           what resulted in unnecessary memory reallocations in GIMPACT.
788         * Implemented support for ability to run collision detection from
789           multiple threads for separate spaces.
790            
791 04/14/08 Oleh Derevenko
793         * Fixed possible memory corruption in new trimesh-trimesh collider
794           in case if two degenerated triangles are checked against each other.
796 04/12/08 Oleh Derevenko
798         * Fixed sporadic assertion failure on vector normalization caused
799           by small triangles degenerating into segments during space 
800           transformations.
802 03/28/08 Remi
804         * Fix a bug in dJointXXXGetInfo. The value in limot.limit was not
805           always updated. (Ex: If hi and lo limit were changed). 
807 03/27/08 Remi
809         * Added a new Joint: Prismatic Universal (patch #1828454).
811          Daniel K. O.
813         * Fixed bug #1841309: collide2() method buggy.
815 03/18/08 Rodrigo
817         * New function: dVector4Copy.
819 03/14/08 david
821         * Added stub calls for trimesh functions.
822         * Applied patch #1914232: dGetConfiguration.
823         * Applied patch #1655333: Optimize the function dNormalize3.
824         * New function: dSetColliderOverride.
825         * New function: dCheckConfiguration.
826         
827          Daniel K. O.
829         * Disabled building shared library by default with autotools.
831 03/13/08 david
833         * New function: dJointGetNumBodies (patch #1901550).
834         * New function: dSpaceGetClass (patch #1901637).
835         * Applied patch #1901649: Add missing function in the export
837 03/12/08 Rodrigo
839         * Fixed drawstuff build issues on OSX.
841 01/12/08 Daniel K. O.
843         * Fixed a typedef bug in configure.in.
844         * Added dCylinder to the C++ wrappers.
845         * Applied patch 1851394: support for GIMPACT with double precision,
846           dCollide fix.
847         * Moved bunny geometry to bunny_geom.h.
849 12/11/07 Daniel K. O.
851         * Added damping and MaxAngularVel() functions.
852         * Const-correctness: added const qualifier to some dWorldGet and dBodyGet
853           functions.
854         * Updated the odecpp.h header.
856 12/07/07 Daniel K. O.
858         * Removed most of the compiler warnings from Drawstuff, ODE and
859           OPCODE
860         * Upgraded automake requirement to 1.10, and change some Makefile.am
862 12/06/07 Rodrigo
864         * Modified autotools to use libtool for
865           library generation and administration
866         * Removed release and debug flags for configure.in
867           CPPFLAGS, CFLAGS, CXXFLAGS should be set by the
868           user to their liking, respecting autotools policies.
870 11/30/07 Daniel K. O.
871         * Applied patch 1813079 (moved callback)
872         * Replaced moveAndRotateBody by dxStepBody in stepfast.cpp
874 11/10/07 david
876         * Added 'Sweep and Prune' collision space.
877         * New Piston joint type with demo, by Remi Ricard
878         * Added build option to use 16-bit indices for OPCODE trimesh
880 11/03/06 david
882         * Integrated Christoph Beyer's average based sampling system for body
883           disabling.
885 10/26/06 Francisco Leon
887         * Totally refactored trimesh collision system.
888           Using GIMPACT instead of OPCODE. Now works correctly, and faster.
889           Visit http://gimpact.sourceforge.net.
890           
891         * Finally, test_moving_trimesh.exe works nicely.   
892           
893         * Fixed autodisable system. Now is possible to set bigger sleeping 
894           threshold values and objects won't be sleeping on the air. They will
895           rest on the floor properly.
896                   
897         * dInitODE function added.
898         
899         * Is Obligatory to call dInitODE() at the beginning for initialize ODE,
900           and calling dCloseODE() when the program ends.
902 09/20/06 bram
904         * Fixed two bugs in cyl/plane collision test.
906 09/13/06 Remi
908         * New Rotoide - Prismatic joint type
909         * dJointGetUniversalAngles for efficient angle retrieval.
911 08/09/06 david
913         * Integrated plane2d joint type which constrains bodies to z == 0.
915 07/06/06 david
917         * Added heightfield primitive collision code. Simple test available in
918           ode/test/test_heightfield
920 04/03/06 rodrigo
922         * Added Convex primitive collision code,
923           currently only convex-sphere and convex-plane work
925 04/01/06 bram
927         * Added program to test trimesh vs sphere: ode/test/test_basket
929 03/20/06 jason379
931         * Added new autogenerated Visual Studio projects, with Premake scripts
933 03/17/06 bram
935         * Added plane/cyl intersection test
936         * Renamed CCylinder to Capsule
937         
938 02/04/06 gcarlton
940         * Added support for geom offsets.
942 10/26/05 rodrigo
944         * Removed LIBTOOL from autotools since it was not really required.
945         * Added a target to build ODE as a shared library, this shared
946           library gets build alongside the static one, no flags required.
948 10/24/05 tfautre
950         (Backported patches from STABLE branch, applied by Adam)
951         
952         * dRandInt changed for a non-double all-int version.
953         * mics minor fixes and improvements.
955 04/05/05 tfautre
957         * Fixed segmentation fault with OPCODE on 64 bits systems.
959 03/31/05 tfautre
961         * Fixed timer.cpp compiler error on x86-64 using GCC.
963 03/29/05 colin
965         * Added trimesh preprocessing to mark unneeded edges and verts.  Also
966           added support for preprocessed info to the ccylinder-trimesh
967           collider.
969 12/07/04 adam
971         * Important AMotors bugfix
973 09/22/04 jeff
975         * Assorted small bugfixes and tweaks for
976           trimesh_{box,ccylinder,trimesh} collisions
978 09/21/04 jeff
980         * added functions to joint.cpp to allow joint attachment to moving
981           geoms.
983         * added malloc-based memory allocation in step.cpp & lcp.cpp (turned
984           on with a #define switch in common.h)
985         
986 05/29/04 russ
988         * added joint feedback to the QuickStep solver
990 05/18/04 russ
992         * added warm starting to the QuickStep solver
994 05/18/04 russ
996         * added the QuickStep solver
997         
998         * added contact parameter functions.
1000 05/05/04 adam
1002         * use dRandInt instead of rand() in stepfast.
1004 04/21/04 russ
1006         * added auto-disable support from Aras Pranckevicius (with
1007           modifications by russ). this useful feature can speed up
1008           simulation significantly in some cases.
1009         
1010         * various internal tidyups.
1012 04/20/04 russ
1014         * changed the meaning of the 'index' argument to dJointGetBody():
1015           it was the only remaining API function that does not respect
1016           dJOINT_REVERSE (spotted by Matthew D. Hancher).
1017         
1018         * updated the C++ headers: fixed two minor bugs and added
1019           support for dQuadTreeSpace, dRay, and the dGeom::getSpace() method
1020           (from Matthew D. Hancher).
1022 04/18/04 russ
1024         * changed the way that the dInfinity constant is implemented: now it
1025           is #defined to be one of: FLT_MAX, DBL_MAX, HUGE_VAL, HUGE_VALF, or
1026           a large numeric constant. previously it was a variable that was
1027           exported from the library. this simplifies the configuration and
1028           build process quite a bit, especially in the case of DLLs.
1029         
1030         * removed the old, deprecated collision system (geom.cpp,space.cpp,
1031           geom.h,space.h,odecpp_old_collision.h). the ODE_OLD_COLLISION
1032           configuration setting no longer has any meaning.
1033         
1034         * removed support for dGeomGroups, which have been deprecated for
1035           a while and are equivalent to 'spaces' anyway.
1037 04/13/04 russ
1039         * bug fix in dMassSetCappedCylinder(), from Matthew D. Hancher.
1041 04/08/04 russ
1043         * added trimesh-CCylinder capability, from Vadim Macagon
1044           <vadim_mcagon@hotmail.com>.
1046 04/04/04 adam
1048         * yet another rewrite of triangle-box collision code, this
1049         time based on code donated by Croteam, ported by asko@jetti.org
1050         and tweaked by Erwin.
1052 04/04/04 adam
1054         * merged trimesh-trimesh collision code by
1055         Jeffrey Smith <jeffreys@Softimage.com>.
1057         * changed it to not break the trimesh interface, fix
1058         some GCC compilation problems, bring it up to date with
1059         ODE changes from 2003-11-15 -> 2004-04-04.
1061         * add ability to drop meshes on meshes in test_moving_trimesh,
1062         not as good as it could be but it's illustrative.
1064 01/16/04 adam
1066         * implement a bunch of ultra-simple TriMesh functions that were
1067         in the headers but not in the code -- patch by
1068         Vadim Macagon <vadim_mcagon@hotmail.com>
1070         * disable temporal coherence on trimeshes by default, since
1071         it has scaleability issues that don't make it a general clear win.
1073 12/01/03 adam
1075         * implement dxHashSpace::collide2(), not particularly efficiently.
1077 11/14/03 adam
1079         * applied several Trimesh fixes and improvements from
1080         Aras Pranckevicius <nearaz@interamotion.com>
1082 10/22/03 adam
1084         * apply Nguyen Binh's work for removing many dSetZero() calls
1085         and some other extraneous initializations.
1087 07/29/03 martin
1089         * added dJointAdd*Torque/Force().
1091 07/10/03 russ
1093         * added the StepFast code, by David Whittaker.
1095 07/02/03 martin
1097         * added dMassSet*Total().
1099 07/01/03 martin
1101         * added joint limits and motors to universal joints.
1103         * reversed the polarity of the dJOINT_REVERSE flag.
1105 06/30/03 russ
1107         * added the TriMesh geom class and the quad tree space to the ODE
1108           core. both of these were developed by Erwin de Vries. added OPCODE
1109           to the ODE distribution, this is required by TriMesh.
1111 06/23/03 martin
1113         * added dGeomSetQuaternion() and dGeomGetQuaternion()
1114         
1115         * added dJointGet*Anchor2()
1117 05/07/03 russ
1119         * added dGeomGetSpace().
1121 02/05/03 russ
1123         * added dMassSetCylinder().
1125 12/07/02 russ
1127         * added dAreConnectedExcluding().
1129 11/30/02 russ
1131         * added the ray geom class.
1133         * added the dGeomXXXPointDepth() functions.
1135         * added a collision test infrastructure, and some more tests.
1137 11/24/02 russ
1139         * added support for multiple box-box contacts.
1141 11/10/02 russ
1143         * added new collision system. select between the old/new system by
1144           setting the ODE_OLD_COLLISION variable in config/user-settings.
1146 10/28/02 russ
1148         * fixed two problems in the LCP code to improve the reliability of
1149           the dContactApprox1 contact mode.
1151         * added a FAQ question about rolling bodies getting stuck when they
1152           hit multiple geoms.
1154 09/08/02 russ
1156         * added dClosestLineSegmentPoints().
1157         * implemented dCollideCB().
1159 08/28/02 russ
1161         * added dJointSetFeedback() and dJointGetFeedback().
1163 08/05/02 russ
1165         * added dGeomTransformSetInfo() and dGeomTransformGetInfo().
1167 07/13/02 russ
1169         * added dBodySetForce(), dBodySetTorque(), dWorldImpulseToForce(),
1170           dBodyGetPosRelPoint(), dBodyGetPosRelPoint(), dBodyVectorToWorld(),
1171           dBodyVectorFromWorld().
1173         * added dBodyGetPointVel() (thanks to Colin Reed).
1175         * added a new C++ interface (from Martin C. Martin, with modifications
1176           by russ). the old C++ interface is now in odecpp_old.h.
1178 06/25/02 russ
1180         * added an additional BSD-style licensing option for ODE.
1182 06/23/02 russ
1184         * added dCloseODE(), contributed by Nate Waddoups and David McClurg.
1186 05/16/02 russ
1188         * added dSpaceQuery(), contributed by Nate Waddoups.
1190 04/07/02 russ
1192         * added a section to the documentation for universal joints.
1193           this includes a picture of the joint.
1195 04/05/02 russ
1197         * added a universal joint class (generously contributed by
1198           Martin C. Martin). it doesn't (yet) have a motor or joint limits,
1199           but it does come with tests.
1201 03/11/02 russ
1203         * makefile changes to accomodate OSs with command line length
1204           limitations (thanks to Norman Lin).
1206 01/06/02 russ
1208         * added the dBodySetGravityMode() and dBodyGetGravityMode()
1209           functions, which change the dxBodyNoGravity body flag.
1211         * added support for building a DLL with MSVC - there is now a
1212           msvc-dll target. thanks to Norman Lin for doing this.
1214 12/28/01 russ
1216         * added the dParamCFM joint parameter.
1218 12/24/01 russ
1220         * reworked the build system to make it more cross-platform.
1221           there is now a single top-level makefile and a configurator.c
1222           program. see the INSTALL file for details.
1224 12/04/01 russ
1226         * the "angular motor" joint has been completed, and a new section
1227           has been added to the documentation.
1229 11/26/01 russ
1231         * added a new joint type: "angular motor". using this joint is a good
1232           way to get ball-joint motors and limits. this is work in progress -
1233           it has not been fully implemented or tested yet.
1235 11/22/01 russ
1237         * replaced the mmap()-based joint group stack (stack.cpp) with a
1238           malloc()-based arena stack (obstack.cpp). this will be more
1239           portable and should not impact performance.
1241 11/12/01 russ
1243         * changed the meaning of the 'flags' parameter to dCollide() and
1244           related functions: now the size of the contact buffer is kept in
1245           the lower 16 bits. this change will be backward compatible.
1247         * added dBodyGetFiniteRotationMode() and dBodyGetFiniteRotationAxis().
1249         * added dBodyAddForceAtRelPos() function.
1251 11/11/01 russ
1253         * added the ability to manually enable and disable bodies.
1254           see dBodyEnable(), dBodyDisable(), dBodyIsEnabled().
1256         * fixed a potential bug: when a world is destroyed that contains
1257           joints in joint groups, those joints are marked as "deactivated" in
1258           the joint group, so when the joint group is destroyed they can be
1259           ignored.
1261         * the test_boxstack demo has new options to enable and disable bodies.
1263         * new configuration parameter in config.h: dEFFICIENT_SIZE.
1265 11/11/01 russ
1267         * started the change log for ODE. changes older than today were added
1268           to this file by inspecting the CVS logs.
1270 11/05/01 russ
1272         * added REAL() constructions for floating point numbers, to prevent
1273           many warnings when compiling under VC++.
1275 11/03/01 russ
1277         * added geometry transform class, documented composite objects.
1279         * added collision rule: no contacts if both geoms on the same body.
1280           this is not the best rule, may have to remove this in the future.
1282         * new dMassAdd() function.
1284         * capped cylinder to capped cylinder collision function.
1286 10/31/01 russ
1288         * increase CFM in some demos to make them more robust.
1290 10/29/01 russ
1292         * added new accessor functions.
1294 10/19/01 russ
1296         * added the dJOINT_TWOBODIES flag to the joint, that says it can not
1297           be attached to just one body.
1299 10/12/01 russ
1301         * fixed a collision bug in dCollide() that was causing memory
1302           corruption when multiple contacts were being returned.
1304 10/11/01 russ
1306         * joints can now return m=0 to be "inactive". added a "null" joint
1307           to test this.
1309 10/09/01 russ
1311         * in the LCP solver, try to fail gracefully when s <= 0.
1313         * dAABBTestFn() API change.
1315 10/08/01 russ
1317         * fixed a contact swapping bug in dCollide().
1319 10/07/01 russ
1321         * added capped cylinder geometry object.
1323 09/30/01 russ
1325         * the test_buggy demo now uses geometry groups.
1327         * added a dAABBTestFn field in the geometry classes.
1329 09/29/01 russ
1331         * added geometry groups.
1333 09/20/01 russ
1335         * added finite rotation stuff.