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