Subject: CVS commit: pkgsrc/devel/ode
From: Kamil Rytarowski
Date: 2016-07-24 03:28:37
Message id: 20160724012837.88B88FBB5@cvs.NetBSD.org

Log Message:
Upgrade from ode-0.5 to ode-0.13

pkgsrc changes:
 - set license
 - revamp build definitions
 - revamp blk3.mk and bump API_DEPENDS to 0.13 (recent software depends on new \ 
ode-config)
 - drop all local patches as not needed

upstream changes:
Changes for 0.13

New features:

    Stable, implicit gyroscopic forces (patch #185 by Joseph Cooper). Bodies \ 
with gyroscopic forces won't gain energy anymore.
    New joint: transmission joint (patch #182 by Dimitris Papavasiliou).
    Contacts now have rolling friction (patch #184 by Joseph Cooper).
    Removed the need for defining dSINGLE/dDOUBLE; this is stored now in the \ 
generated ode/precision.h header.
    New joint: Double Ball (AKA "distance joint").
    New joint: Double Hinge.
    Threaded execution support interface added. Optional built-in threading \ 
implementation added. Internal threading implementation is excluded by default \ 
and to be used, it must be enabled with configure/premake: \ 
--disable-threading-intf (--no-threading-intf for Windows/Premake). This allows \ 
disabling threading interface support.

Bug fixes

    Joint feedback forces application fixed in QuickStep implementation
    Bug #89 by Luc: (dJointAddSliderForce() adds a zero force when the parent \ 
body is NULL)
    Bug #88 by Luc: heightfield data assigned to a wrong field in \ 
dGeomHeightfieldSetHeightfieldData
    Fixed cylinder AABB computation.
    Removed ALLOCA calls from dHashSpace; it should not depend on stack size \ 
limits anymore.
    Bugs in AMotor joint (patch #181)
    Bugs in PU joint (patch #186)
    Fixed issue with friction and non-friction constraints being intermixed \ 
during constraints random reordering in QuickStep.
    Fixed matrix inversion bug (patch #183).
    Fixed issue with some kinds of joints (Ball, DBall, DHinge, Fixed) might \ 
overwrite world ERP value with their custom ERP during getInfo2() call and that \ 
inappropriate value would then be passed to subsequent joints in solver instead \ 
of world ERP.
    Fixed issues reported in patches #151 and #22 (collisions with SAPSpace and \ 
QuadTreeSpace might not work because geometries list was misused in them).
    Fixed IsPointInPolygon in convex.cpp (patch #160 by Janis Rucis)
    Fixed zero comparisons in OPCODE to use relative error instead of absolute \ 
epsilon value (found by Bill Sellers)
    Fixed dhinge's last constraint to properly handle rotations.
    Fixed plane2d joint: uninitialized variables (reported by Dimitris Papavasiliou)
    Bug #80 by Georg Martius: better handling of capsule-box with deep penetrations.
    Fixed zero-mu issues: now either mu or mu2 can be set to zero.

Other changes

    Public headers cleaned to cause less pollution of typedefs and macros.

Changes for 0.12

    Added python bindings, contributed by Gideon Klompje.
    Integrated libccd from Daniel Fiser, provides new colliders based on GJK, \ 
EPA and MPR. Now cylinders can collide with cylinders!
    New functions have been added:
        dWorldUseSharedWorkingMemory()
        dWorldCleanupWorkingMemory()
        dWorldSetStepMemoryReservationPolicy()
        dWorldSetStepMemoryManager()
        dGeomLowLevelControl(): change/query OPCODE trimesh-sphere contact \ 
merging behavior at runtime.
        dGeomGetRelPointPos() (patch #2991622)
        dGeomGetPosRelPoint() (patch #2991622)
        dGeomVectorToWorld() (patch #2991622)
        dGeomVectorFromWorld() (patch #2991622)
    dWorldStepFast1 API removed along with dWorld[Get/Set]AutoEnableDepthSF1
    dWorldStep() and dWorldQuickStep() have been changed to return boolean \ 
success status, and avoid allocation on stack.
    dInitODE2() changed to automatically call \ 
AllocateODEDataForThread(dAllocateFlagBasicData) after library initialization.
    Made sure neither dSINGLE or dDOUBLE is defined by default; the user should \ 
always explicitly specify the precision.
    Fixed a bug in dGeomCopyOffsetRotation().
    Macros changed to static inline functions in odemath.h and related files.
    Improvement for trimesh-plane collision.
    odecpp classes changed to be inheritable and easily expandable
    QuadTreeSpace implementation corrected to avoid object-block relation \ 
ambiguity due to numeric errors.
    Fixed bug affecting disabled joints and dWorldStep.
    Added extern "C" wrapper to dWorldExportDIF().
    Fixed bug #2937076: don't try to build demos if drawstuff is disabled.
    Applied patch #2931174 to make demos work for recent MacOS.
    Applied patch #2931177 to fix the demos' framerate on X11.
    Applied patch #2995450 to generate up to four contacts for box-plane \ 
collision test and fix contact depths.
    Applied patch #3030783 to fix drawstuff dimensions being ignored in OSX GLUT \ 
port.
    Applied patch #3429454: fix compilation on some platforms.
    Heightfield zone boundaries calculation code fixed to also consider whole \ 
next cell after the AABB if the AABB ends exactly at the cell boundary.
    New demo: demo_tracks.
    Fixed a box-capsule bug: more reasonable normal for deep penetrations.
    Many internal fixes to world stepping and collision detection code.

Changes for 0.11.1

    Made the new trimesh collider the default.
    Added a "-texturepath" option to drawstuff.
    Heightfield rotation fixed to avoid NaNs while rotating infinite MIN/MAX heights.
    Incorrect parameter order fixed on contact merging in Sphere-Trimesh collisions.
    Fixed bug #2685170: use the C99 __func__ instead of __FUNCTION__ when a C99 \ 
implementation is available.
    Remove unused code in demo_joints.cpp.
    Fix bug in collision categories in demo_jointPU.
    Added a possibility to initialize/close ODE multiple times recursively has \ 
been added. Also, now a call to dSpaceSetManualCleanup() is required for each \ 
space right after creation if ODE has been initialized in thread data manual \ 
cleanup mode.
    Thread local data has been cleaned up from OPCODE and OdeTls.
    New house of cards demo, which stresses the friction handling stability.

Changes for 0.11

This release contains many joint-related bug fixes, and some new features like \ 
kinematic bodies, better convex-convex collision detection and some extra \ 
functions.

    Fix bug: Fix problem when attaching no body to a joint.
    Fix problem with dJointGetUniversalAngle2 when the joint is attached to only \ 
a body 2. The sign was inverted.
    Fix bug reported by Tilman: dxJointPU::getInfo1 was setting twice the limit \ 
of limot1 to zero and not limot2.
    Fixed a bug in dSpaceCollide2: if both geoms are not in spaces they would \ 
not have valid AABBs.
    Swapped geometries returned in contacts for OPCODE Trimesh-Plane collisions \ 
as they were returned in unnatural order being different from that in GIMPACT
    Fixed an inverted sign problem on positions of joints PU and PR.
    Fix bug: when a slider, piston, pu or pr joint had only one body attached to \ 
position 2, dJointAttach(jId, 0, bId). The body was not push in the right \ 
direction to move back between the limits.
    Fix bug in dJointGetPUAxis2: the axis was not multiplied with the the \ 
rotation matrix of the good body.
    Fix bug if there is only one body on the PU joint the axis returned was not \ 
the right one.
    New functions: dJointSetUniversalAxis1Offset and dJointSetUniversalAxis2Offset.
    New functions: dJointEnable, dJointDisable, dJointIsEnabled (patch #2454764).
    New functions: dGeomTriMeshSetTriMergeCallback/dGeomTriMeshGetTriMergeCallback.
    New function: void dJointSetPUAnchorOffset (deprecating dJointSetPUAnchorDelta).
    New functions: dJointGetPRAngle and dJointGetPRAngleRate.
    New functions: dBodyGetGyroscopicMode and dBodySetGyroscopicMode (patch \ 
#2019242).
    Applied patch #2538046: Heightfield AABB bounds patch.
    Applied patch #2381592, which adds support for Kinematic Bodies.
    Applied a patch to make GIMPACT trimesh-ray collisions to be consistent with \ 
those in OPCODE (bug #2214623).
    Applied a patch to make side1, side2 fields of contact structure be always \ 
initialized.
    Applied patch #2158425: This patch enable GIMPACT to work on 64-bit machine.
    Applied patch #2080674: Improved dBodySetRotation; now exact rotation \ 
matrices are preserved until the next simulation step.
    Enable the motor on the rotoide part of the PR joint.
    Added Blender script to create ODE convex geoms under tools.
    Convex-Convex collision detection code is finally (nearly) stable.

Changes for 0.10.1

This is a bugfix release, so you shouldn't expect anything to stop working from 0.10.

    New function: dJointSetPistonAnchorOffset
    Add new function dJointSetHingeAxisDelta
    Fix problem with dJointGetPistonPosition and dJointGetPistonPositionRate \ 
when the joint is attached to only a body 2. The sign was inversed.
    Update the slider joint to have the same behavior as the other joint when \ 
there is only a body2 attached to it.
    Rename the new function dJointSetHingeAxisDelta to dJointSetHingeAxisOffset. \ 
This will remove confusion with the old function dJointSetHingeAnchorDelta.
    Bug fix: Max Correcting Vel behavior is now the same as before 0.10.

Changes for 0.10

    New functions: dInitODE2(), dAllocateODEDataForThread(), \ 
dCleanupODEAllDataForThread(). This adds support for ability to run collision \ 
detection from multiple threads for separate spaces.
    New functions: dCheckConfiguration(), dGetConfiguration(), to test how ODE \ 
was compiled.
    New function: dJointGetNumBodies (patch #1901550).
    New function: dSpaceGetClass (patch #1901637).
    New function: dSetColliderOverride(), to register custom collision handling \ 
functions.
    Added damping and MaxAngularVel() functions.
    Applied patch #1335202: Contact Joint Motion (see demo_motion.cpp).
    Applied patch #1851394: support for GIMPACT with double precision, dCollide fix.
    Applied patch #1813079 (moved callback).
    Added possibility to collide a space of lower sublevel as a geometry against \ 
another space of a higher level with dSpaceCollide2. \ 
dSpaceSetSublevel/dSpaceGetSublevel are used for sublevel assignment/retrieval.
    Fixed a bug in dJointXXXGetInfo. The value in limot.limit was not always \ 
updated. (Ex: If hi and lo limit were changed).
    New Joint: Prismatic Universal (patch #1828454).
    New Joint: Piston, with demo.
    Disabled building shared library by default with autotools. ODE shouldn't be \ 
installed as a system library.
    Fixed drawstuff build issues on OSX.
    Removed release and debug flags for configure.in: CPPFLAGS, CFLAGS, CXXFLAGS \ 
should be set by the user to their liking, respecting autotools policies.
    Added 'Sweep and Prune' collision space.
    Optimizations, many bug fixes, and code cleanup.

Changes from 0.8 to 0.9

    New Feature: CONTACTS_UNIMPORTANT flag added for dCollide() to allow \ 
canceling any contact improvements and return any contacts found as soon as \ 
possible
    New feature: Add erp/cfm parameters to fixed and ball joint. SF PATCH 1478244
    Assert on zero normalizations, add dSafeNormalize. Added boolean result for \ 
dNormalize3() and dNormalize4() so that normalization success could be checked
    SF Patch 1808007: fix gimpact compiler warning
    Apply SF patch 1800579: dGeomTriMeshSetData does not work with GIMPACT
    Fix: heightfield collision could return less contacts than was possible
    Fix: the deepest contact might be not selected if there was a lack of \ 
contact slots in trimesh-trimesh and trimesh-box cases (function exited \ 
immediately and did not check for possible contact coincidences).
    Improvement: optimizations for GIMPACT versions of trimesh-capsule, \ 
trimesh-trimesh, trimesh-plane, trimesh-sphere
    Improvement: dCollideConvexPlane optimized
    Fix: cylinder-box collision did not respect requested contact count limit
    Fix SF issue 1729096 by adding dMassSetTrimeshTotal
    Apply SF patch 1685107: Enforce 1 contact request
    Apply SF Patch 1697014: Update JointPR code
    Catch SF BUG 1621938: gimpact only does stride 12.
    patch 1769851 by Jon Watte: recalc aabb when new setting new data
    Added Richard Barrington's model loader for XNA (to be used with ODE.NET)
    1586733 collision_trimesh_trimesh.cpp OPCODE fix Added Francisco Leon's \ 
alternate trimesh-trimesh collider.
    1691402 Heighfield performance patch patch
    1696933 Fix bug in dWorldExportDIF when joint in "limbo"
    Renamed "tests" to "demos" and split out unit test \ 
project. Updated premake scripts and Visual Studio files; automake files still \ 
need to be updated.
    Make building demos optional. SF patch 1650563
    lib64 fixes, SF patch 1646598
    Warn against using double precision with gimpact
    Many more bug fixes and optimizations.

Changes from 0.7 to 0.8

    New Rotoide - Prismatic Joint
    Optimisation when dGYROSCOPIC is disabled (default)
    dJointGetUniversalAngles to efficiently get both angles at once.

Changes from 0.6 to 0.7

    New heightfield primitive for terrains.
    Trimesh-Plane collision.
    Ray-Cylinder collision.
    Integration of the plane-2d joint.
    Improved support for convex hulls.
    Fix for joint limit handling.
    Half-space optimisation for axis aligned planes.

Changes from 0.5 to 0.6

    Added flat-capped cylinders.
    CCylinder has been renamed as Capsule.
    Added support for geom offsets.
    Improved stepping function (dWorldQuickStep)
    Much improved support for trimesh collision shapes
    Added support for 64-bit systems
    Started support for convex hulls

    New and improved build system
    Lots of bug fixes, stability, and performance improvements

Geom Offset Overview

Geom offsets allow geom objects to be offset from a body's position. This is \ 
useful for cases where an object has an offset centre of mass, or is made up out \ 
of several geoms each with their own local position. Native support for geom \ 
offsets means that the geomTransform container is now obselete.

The real advantage over geomTransform is that there is a much easier interface \ 
for setting, getting, and modifying a geom's offset from its body. The \ 
elimination of geomTransform simplifies callbacks which no longer have to \ 
special case that geom class type. In terms of performance, the new code has a \ 
negligible performance difference and a memory improvement compared to using a \ 
geomTransform.
Geom Offset and Bodies

An offset only makes sense for geoms which are connected to bodies. It is an \ 
error to attempt to set an offset for a geom which is not connected to a body. \ 
When a geom is disconnected from a body, any offset will be automatically \ 
eliminated. Thus, the possible states a geom can be in are:

    Geom
    Geom on body
    Geom on body, with an offset

To create an offset, just call on of the geomSetOffset functions. The offset \ 
will be automatically created if it does not yet exist. Geom offsets are \ 
normally set by specifying the offset in local coordinates. An extra set of \ 
functions are provided to allow an offset to be determined by providing world \ 
coordinates and subtracting them from the current body position. These second \ 
set of functions, geomSetOffsetWorldPosition(),etc, allow the user to \ 
essentially say "keep the body where it is, and move its geom to this \ 
position in the world".
Geom Offset API

This is defined in the doxygen documentation.
Geom Offset affect on existing API

The following functions have been updated such that they transparently work with \ 
offsets.

   void dGeomSetPosition (dGeomID, dReal x, dReal y, dReal z)
   void dGeomSetRotation (dGeomID, const dMatrix3 R)
   void dGeomSetQuaternion (dGeomID, const dQuaternion)
   const dReal * dGeomGetPosition (dGeomID)
   const dReal * dGeomGetRotation (dGeomID)
   void dGeomGetQuaternion (dGeomID, dQuaternion result)
   void dGeomGetAABB (dGeomID, dReal aabb[6])

The functions that get a geom's position will return its final position in world \ 
coordinates. If a geom is offset, it is no longer true that \ 
dGeomGetPosition()==dBodyGetPosition(). Instead, each will return its own world \ 
position, with the geom being offset from the body.

The functions that set a geom's position will move the body to the position such \ 
that the geom will have the position passed in. So if the geom has a positional \ 
offset of (0,0,1), and we call dGeomSetPosition(g,10,10,10), the end result will \ 
be the body's position being set to (10,10,9). As such, either dGeomSetPosition \ 
or dBodySetPosition can be used, depending on which is more convenient. The \ 
other position is automatically updated.
Geom Offset and geomTransform

GeomTransforms are still supported, and all existing code transparently works. \ 
When writing new code, however, it is far easier to work with geoms and offsets.

The change eliminates a large amount of special casing needed to do when working \ 
with geomTransforms. Setting an offset is trivial, and does not require \ 
inserting or removing new GeomTransforms from spaces. There is no need to \ 
special case getting an offset geom's world position, or setting an offset \ 
geom's world position.

It is especially useful in the collide callback. The old way required getting \ 
the object as the real geom (but without being able to easily grab its \ 
Transform, or even its body!), or as its Transform (forcing special casing code \ 
to extract the real geom in that case).

Files:
RevisionActionfile
1.17modifypkgsrc/devel/ode/Makefile
1.5modifypkgsrc/devel/ode/PLIST
1.10modifypkgsrc/devel/ode/buildlink3.mk
1.9modifypkgsrc/devel/ode/distinfo
1.2removepkgsrc/devel/ode/patches/patch-aa
1.1removepkgsrc/devel/ode/patches/patch-ab
1.1removepkgsrc/devel/ode/patches/patch-ac