1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */
28 module derelict.ode.ode;
29 
30 import derelict.util.loader,
31        derelict.util.system;
32 public {
33     import derelict.ode.types,
34            derelict.ode.functions;
35 }
36 
37 class DerelictODELoader : SharedLibLoader {
38     this() 
39     {
40         super(libNames);
41     }
42 
43     protected override void loadSymbols() 
44     {
45         bindFunc(cast(void**)&dGetConfiguration, "dGetConfiguration");
46         bindFunc(cast(void**)&dCheckConfiguration, "dCheckConfiguration");
47         bindFunc(cast(void**)&dGeomDestroy, "dGeomDestroy");
48         bindFunc(cast(void**)&dGeomSetData, "dGeomSetData");
49         bindFunc(cast(void**)&dGeomGetData, "dGeomGetData");
50         bindFunc(cast(void**)&dGeomSetBody, "dGeomSetBody");
51         bindFunc(cast(void**)&dGeomGetBody, "dGeomGetBody");
52         bindFunc(cast(void**)&dGeomSetPosition, "dGeomSetPosition");
53         bindFunc(cast(void**)&dGeomSetRotation, "dGeomSetRotation");
54         bindFunc(cast(void**)&dGeomSetQuaternion, "dGeomSetQuaternion");
55         bindFunc(cast(void**)&dGeomGetPosition, "dGeomGetPosition");
56         bindFunc(cast(void**)&dGeomCopyPosition, "dGeomCopyPosition");
57         bindFunc(cast(void**)&dGeomGetRotation, "dGeomGetRotation");
58         bindFunc(cast(void**)&dGeomCopyRotation, "dGeomCopyRotation");
59         bindFunc(cast(void**)&dGeomGetQuaternion, "dGeomGetQuaternion");
60         bindFunc(cast(void**)&dGeomGetAABB, "dGeomGetAABB");
61         bindFunc(cast(void**)&dGeomIsSpace, "dGeomIsSpace");
62         bindFunc(cast(void**)&dGeomGetSpace, "dGeomGetSpace");
63         bindFunc(cast(void**)&dGeomGetClass, "dGeomGetClass");
64         bindFunc(cast(void**)&dGeomSetCategoryBits, "dGeomSetCategoryBits");
65         bindFunc(cast(void**)&dGeomSetCollideBits, "dGeomSetCollideBits");
66         bindFunc(cast(void**)&dGeomGetCategoryBits, "dGeomGetCategoryBits");
67         bindFunc(cast(void**)&dGeomGetCollideBits, "dGeomGetCollideBits");
68         bindFunc(cast(void**)&dGeomEnable, "dGeomEnable");
69         bindFunc(cast(void**)&dGeomDisable, "dGeomDisable");
70         bindFunc(cast(void**)&dGeomIsEnabled, "dGeomIsEnabled");
71         bindFunc(cast(void**)&dGeomLowLevelControl, "dGeomLowLevelControl");
72         bindFunc(cast(void**)&dGeomGetRelPointPos, "dGeomGetRelPointPos");
73         bindFunc(cast(void**)&dGeomGetPosRelPoint, "dGeomGetPosRelPoint");
74         bindFunc(cast(void**)&dGeomVectorToWorld, "dGeomVectorToWorld");
75         bindFunc(cast(void**)&dGeomVectorFromWorld, "dGeomVectorFromWorld");
76         bindFunc(cast(void**)&dGeomSetOffsetPosition, "dGeomSetOffsetPosition");
77         bindFunc(cast(void**)&dGeomSetOffsetRotation, "dGeomSetOffsetRotation");
78         bindFunc(cast(void**)&dGeomSetOffsetQuaternion, "dGeomSetOffsetQuaternion");
79         bindFunc(cast(void**)&dGeomSetOffsetWorldPosition, "dGeomSetOffsetWorldPosition");
80         bindFunc(cast(void**)&dGeomSetOffsetWorldRotation, "dGeomSetOffsetWorldRotation");
81         bindFunc(cast(void**)&dGeomSetOffsetWorldQuaternion, "dGeomSetOffsetWorldQuaternion");
82         bindFunc(cast(void**)&dGeomClearOffset, "dGeomClearOffset");
83         bindFunc(cast(void**)&dGeomIsOffset, "dGeomIsOffset");
84         bindFunc(cast(void**)&dGeomGetOffsetPosition, "dGeomGetOffsetPosition");
85         bindFunc(cast(void**)&dGeomCopyOffsetPosition, "dGeomCopyOffsetPosition");
86         bindFunc(cast(void**)&dGeomGetOffsetRotation, "dGeomGetOffsetRotation");
87         bindFunc(cast(void**)&dGeomGetOffsetQuaternion, "dGeomGetOffsetQuaternion");
88         bindFunc(cast(void**)&dCollide, "dCollide");
89         bindFunc(cast(void**)&dSpaceCollide, "dSpaceCollide");
90         bindFunc(cast(void**)&dSpaceCollide2, "dSpaceCollide2");
91         bindFunc(cast(void**)&dCreateSphere, "dCreateSphere");
92         bindFunc(cast(void**)&dGeomSphereSetRadius, "dGeomSphereSetRadius");
93         bindFunc(cast(void**)&dGeomSphereGetRadius, "dGeomSphereGetRadius");
94         bindFunc(cast(void**)&dGeomSpherePointDepth, "dGeomSpherePointDepth");
95         bindFunc(cast(void**)&dCreateConvex, "dCreateConvex");
96         bindFunc(cast(void**)&dGeomSetConvex, "dGeomSetConvex");
97         bindFunc(cast(void**)&dCreateBox, "dCreateBox");
98         bindFunc(cast(void**)&dGeomBoxSetLengths, "dGeomBoxSetLengths");
99         bindFunc(cast(void**)&dGeomBoxGetLengths, "dGeomBoxGetLengths");
100         bindFunc(cast(void**)&dGeomBoxPointDepth, "dGeomBoxPointDepth");
101         bindFunc(cast(void**)&dCreatePlane, "dCreatePlane");
102         bindFunc(cast(void**)&dGeomPlaneSetParams, "dGeomPlaneSetParams");
103         bindFunc(cast(void**)&dGeomPlaneGetParams, "dGeomPlaneGetParams");
104         bindFunc(cast(void**)&dGeomPlanePointDepth, "dGeomPlanePointDepth");
105         bindFunc(cast(void**)&dCreateCapsule, "dCreateCapsule");
106         bindFunc(cast(void**)&dGeomCapsuleSetParams, "dGeomCapsuleSetParams");
107         bindFunc(cast(void**)&dGeomCapsuleGetParams, "dGeomCapsuleGetParams");
108         bindFunc(cast(void**)&dGeomCapsulePointDepth, "dGeomCapsulePointDepth");
109         bindFunc(cast(void**)&dCreateCylinder, "dCreateCylinder");
110         bindFunc(cast(void**)&dGeomCylinderSetParams, "dGeomCylinderSetParams");
111         bindFunc(cast(void**)&dGeomCylinderGetParams, "dGeomCylinderGetParams");
112         bindFunc(cast(void**)&dCreateRay, "dCreateRay");
113         bindFunc(cast(void**)&dGeomRaySetLength, "dGeomRaySetLength");
114         bindFunc(cast(void**)&dGeomRayGetLength, "dGeomRayGetLength");
115         bindFunc(cast(void**)&dGeomRaySet, "dGeomRaySet");
116         bindFunc(cast(void**)&dGeomRayGet, "dGeomRayGet");
117         bindFunc(cast(void**)&dGeomRaySetFirstContact, "dGeomRaySetFirstContact");
118         bindFunc(cast(void**)&dGeomRayGetFirstContact, "dGeomRayGetFirstContact");
119         bindFunc(cast(void**)&dGeomRaySetBackfaceCull, "dGeomRaySetBackfaceCull");
120         bindFunc(cast(void**)&dGeomRayGetBackfaceCull, "dGeomRayGetBackfaceCull");
121         bindFunc(cast(void**)&dGeomRaySetClosestHit, "dGeomRaySetClosestHit");
122         bindFunc(cast(void**)&dGeomRayGetClosestHit, "dGeomRayGetClosestHit");
123         bindFunc(cast(void**)&dCreateHeightfield, "dCreateHeightfield");
124         bindFunc(cast(void**)&dGeomHeightfieldDataCreate, "dGeomHeightfieldDataCreate");
125         bindFunc(cast(void**)&dGeomHeightfieldDataDestroy, "dGeomHeightfieldDataDestroy");
126         bindFunc(cast(void**)&dGeomHeightfieldDataBuildCallback, "dGeomHeightfieldDataBuildCallback");
127         bindFunc(cast(void**)&dGeomHeightfieldDataBuildByte, "dGeomHeightfieldDataBuildByte");
128         bindFunc(cast(void**)&dGeomHeightfieldDataBuildShort, "dGeomHeightfieldDataBuildShort");
129         bindFunc(cast(void**)&dGeomHeightfieldDataBuildSingle, "dGeomHeightfieldDataBuildSingle");
130         bindFunc(cast(void**)&dGeomHeightfieldDataBuildDouble, "dGeomHeightfieldDataBuildDouble");
131         bindFunc(cast(void**)&dGeomHeightfieldDataSetBounds, "dGeomHeightfieldDataSetBounds");
132         bindFunc(cast(void**)&dGeomHeightfieldSetHeightfieldData, "dGeomHeightfieldSetHeightfieldData");
133         bindFunc(cast(void**)&dGeomHeightfieldGetHeightfieldData, "dGeomHeightfieldGetHeightfieldData");
134         bindFunc(cast(void**)&dClosestLineSegmentPoints, "dClosestLineSegmentPoints");
135         bindFunc(cast(void**)&dBoxTouchesBox, "dBoxTouchesBox");
136         bindFunc(cast(void**)&dBoxBox, "dBoxBox");
137         //bindFunc(cast(void**)&dInfiniteAABB, "dInfiniteAABB");
138         bindFunc(cast(void**)&dCreateGeomClass, "dCreateGeomClass");
139         bindFunc(cast(void**)&dGeomGetClassData, "dGeomGetClassData");
140         bindFunc(cast(void**)&dCreateGeom, "dCreateGeom");
141         bindFunc(cast(void**)&dSetColliderOverride, "dSetColliderOverride");
142 
143         // collision_space.h
144         bindFunc(cast(void**)&dSimpleSpaceCreate, "dSimpleSpaceCreate");
145         bindFunc(cast(void**)&dHashSpaceCreate, "dHashSpaceCreate");
146         bindFunc(cast(void**)&dQuadTreeSpaceCreate, "dQuadTreeSpaceCreate");
147         bindFunc(cast(void**)&dSweepAndPruneSpaceCreate, "dSweepAndPruneSpaceCreate");
148         bindFunc(cast(void**)&dSpaceDestroy, "dSpaceDestroy");
149         bindFunc(cast(void**)&dHashSpaceSetLevels, "dHashSpaceSetLevels");
150         bindFunc(cast(void**)&dHashSpaceGetLevels, "dHashSpaceGetLevels");
151         bindFunc(cast(void**)&dSpaceSetCleanup, "dSpaceSetCleanup");
152         bindFunc(cast(void**)&dSpaceGetCleanup, "dSpaceGetCleanup");
153         bindFunc(cast(void**)&dSpaceSetSublevel, "dSpaceSetSublevel");
154         bindFunc(cast(void**)&dSpaceGetSublevel, "dSpaceGetSublevel");
155         bindFunc(cast(void**)&dSpaceSetManualCleanup, "dSpaceSetManualCleanup");
156         bindFunc(cast(void**)&dSpaceGetManualCleanup, "dSpaceGetManualCleanup");
157         bindFunc(cast(void**)&dSpaceAdd, "dSpaceAdd");
158         bindFunc(cast(void**)&dSpaceRemove, "dSpaceRemove");
159         bindFunc(cast(void**)&dSpaceQuery, "dSpaceQuery");
160         bindFunc(cast(void**)&dSpaceClean, "dSpaceClean");
161         bindFunc(cast(void**)&dSpaceGetNumGeoms, "dSpaceGetNumGeoms");
162         bindFunc(cast(void**)&dSpaceGetGeom, "dSpaceGetGeom");
163         bindFunc(cast(void**)&dSpaceGetClass, "dSpaceGetClass");
164 
165         // collision_trimesh.h
166         bindFunc(cast(void**)&dGeomTriMeshDataCreate, "dGeomTriMeshDataCreate");
167         bindFunc(cast(void**)&dGeomTriMeshDataDestroy, "dGeomTriMeshDataDestroy");
168         bindFunc(cast(void**)&dGeomTriMeshDataSet, "dGeomTriMeshDataSet");
169         bindFunc(cast(void**)&dGeomTriMeshDataGet, "dGeomTriMeshDataGet");
170         bindFunc(cast(void**)&dGeomTriMeshDataGet2, "dGeomTriMeshDataGet2");
171         bindFunc(cast(void**)&dGeomTriMeshSetLastTransform, "dGeomTriMeshSetLastTransform");
172         bindFunc(cast(void**)&dGeomTriMeshGetLastTransform, "dGeomTriMeshGetLastTransform");
173         bindFunc(cast(void**)&dGeomTriMeshDataBuildSingle, "dGeomTriMeshDataBuildSingle");
174         bindFunc(cast(void**)&dGeomTriMeshDataBuildSingle1, "dGeomTriMeshDataBuildSingle1");
175         bindFunc(cast(void**)&dGeomTriMeshDataBuildDouble, "dGeomTriMeshDataBuildDouble");
176         bindFunc(cast(void**)&dGeomTriMeshDataBuildDouble1, "dGeomTriMeshDataBuildDouble1");
177         bindFunc(cast(void**)&dGeomTriMeshDataBuildSimple, "dGeomTriMeshDataBuildSimple");
178         bindFunc(cast(void**)&dGeomTriMeshDataBuildSimple1, "dGeomTriMeshDataBuildSimple1");
179         bindFunc(cast(void**)&dGeomTriMeshDataPreprocess, "dGeomTriMeshDataPreprocess");
180         bindFunc(cast(void**)&dGeomTriMeshSetCallback, "dGeomTriMeshSetCallback");
181         bindFunc(cast(void**)&dGeomTriMeshGetCallback, "dGeomTriMeshGetCallback");
182         bindFunc(cast(void**)&dGeomTriMeshSetArrayCallback, "dGeomTriMeshSetArrayCallback");
183         bindFunc(cast(void**)&dGeomTriMeshGetArrayCallback, "dGeomTriMeshGetArrayCallback");
184         bindFunc(cast(void**)&dGeomTriMeshSetRayCallback, "dGeomTriMeshSetRayCallback");
185         bindFunc(cast(void**)&dGeomTriMeshGetRayCallback, "dGeomTriMeshGetRayCallback");
186         bindFunc(cast(void**)&dGeomTriMeshSetTriMergeCallback, "dGeomTriMeshSetTriMergeCallback");
187         bindFunc(cast(void**)&dGeomTriMeshGetTriMergeCallback, "dGeomTriMeshGetTriMergeCallback");
188         bindFunc(cast(void**)&dCreateTriMesh, "dCreateTriMesh");
189         bindFunc(cast(void**)&dGeomTriMeshSetData, "dGeomTriMeshSetData");
190         bindFunc(cast(void**)&dGeomTriMeshGetData, "dGeomTriMeshGetData");
191         bindFunc(cast(void**)&dGeomTriMeshEnableTC, "dGeomTriMeshEnableTC");
192         bindFunc(cast(void**)&dGeomTriMeshIsTCEnabled, "dGeomTriMeshIsTCEnabled");
193         bindFunc(cast(void**)&dGeomTriMeshClearTCCache, "dGeomTriMeshClearTCCache");
194         bindFunc(cast(void**)&dGeomTriMeshGetTriMeshDataID, "dGeomTriMeshGetTriMeshDataID");
195         bindFunc(cast(void**)&dGeomTriMeshGetTriangle, "dGeomTriMeshGetTriangle");
196         bindFunc(cast(void**)&dGeomTriMeshGetPoint, "dGeomTriMeshGetPoint");
197         bindFunc(cast(void**)&dGeomTriMeshGetTriangleCount, "dGeomTriMeshGetTriangleCount");
198         bindFunc(cast(void**)&dGeomTriMeshDataUpdate, "dGeomTriMeshDataUpdate");
199 
200         // error.h
201         bindFunc(cast(void**)&dSetErrorHandler, "dSetErrorHandler");
202         bindFunc(cast(void**)&dSetDebugHandler, "dSetDebugHandler");
203         bindFunc(cast(void**)&dSetMessageHandler, "dSetMessageHandler");
204         bindFunc(cast(void**)&dGetErrorHandler, "dGetErrorHandler");
205         bindFunc(cast(void**)&dGetDebugHandler, "dGetDebugHandler");
206         bindFunc(cast(void**)&dGetMessageHandler, "dGetMessageHandler");
207         bindFunc(cast(void**)&dError, "dError");
208         bindFunc(cast(void**)&dDebug, "dDebug");
209         bindFunc(cast(void**)&dMessage, "dMessage");
210 
211         // export-dif.h - used to not load, loads fine now as it was made extern "C"
212         bindFunc(cast(void**)&dWorldExportDIF, "dWorldExportDIF");
213 
214         // mass.h
215         bindFunc(cast(void**)&dMassCheck, "dMassCheck");
216         bindFunc(cast(void**)&dMassSetZero, "dMassSetZero");
217         bindFunc(cast(void**)&dMassSetParameters, "dMassSetParameters");
218         bindFunc(cast(void**)&dMassSetSphere, "dMassSetSphere");
219         bindFunc(cast(void**)&dMassSetSphereTotal, "dMassSetSphereTotal");
220         bindFunc(cast(void**)&dMassSetCapsule, "dMassSetCapsule");
221         bindFunc(cast(void**)&dMassSetCapsuleTotal, "dMassSetCapsuleTotal");
222         bindFunc(cast(void**)&dMassSetCylinder, "dMassSetCylinder");
223         bindFunc(cast(void**)&dMassSetCylinderTotal, "dMassSetCylinderTotal");
224         bindFunc(cast(void**)&dMassSetBox, "dMassSetBox");
225         bindFunc(cast(void**)&dMassSetBoxTotal, "dMassSetBoxTotal");
226         bindFunc(cast(void**)&dMassSetTrimesh, "dMassSetTrimesh");
227         bindFunc(cast(void**)&dMassSetTrimeshTotal, "dMassSetTrimeshTotal");
228         bindFunc(cast(void**)&dMassAdjust, "dMassAdjust");
229         bindFunc(cast(void**)&dMassTranslate, "dMassTranslate");
230         bindFunc(cast(void**)&dMassRotate, "dMassRotate");
231         bindFunc(cast(void**)&dMassAdd, "dMassAdd");
232 
233         // matrix.h
234         bindFunc(cast(void**)&dSetZero, "dSetZero");
235         bindFunc(cast(void**)&dSetValue, "dSetValue");
236         bindFunc(cast(void**)&dDot, "dDot");
237         bindFunc(cast(void**)&dMultiply0, "dMultiply0");
238         bindFunc(cast(void**)&dMultiply1, "dMultiply1");
239         bindFunc(cast(void**)&dMultiply2, "dMultiply2");
240         bindFunc(cast(void**)&dFactorCholesky, "dFactorCholesky");
241         bindFunc(cast(void**)&dSolveCholesky, "dSolveCholesky");
242         bindFunc(cast(void**)&dInvertPDMatrix, "dInvertPDMatrix");
243         bindFunc(cast(void**)&dIsPositiveDefinite, "dIsPositiveDefinite");
244         bindFunc(cast(void**)&dFactorLDLT, "dFactorLDLT");
245         bindFunc(cast(void**)&dSolveL1, "dSolveL1");
246         bindFunc(cast(void**)&dSolveL1T, "dSolveL1T");
247         bindFunc(cast(void**)&dVectorScale, "dVectorScale");
248         bindFunc(cast(void**)&dSolveLDLT, "dSolveLDLT");
249         bindFunc(cast(void**)&dLDLTAddTL, "dLDLTAddTL");
250         bindFunc(cast(void**)&dLDLTRemove, "dLDLTRemove");
251         bindFunc(cast(void**)&dRemoveRowCol, "dRemoveRowCol");
252 
253         // memory.h
254         bindFunc(cast(void**)&dSetAllocHandler, "dSetAllocHandler");
255         bindFunc(cast(void**)&dSetReallocHandler, "dSetReallocHandler");
256         bindFunc(cast(void**)&dSetFreeHandler, "dSetFreeHandler");
257         bindFunc(cast(void**)&dGetAllocHandler, "dGetAllocHandler");
258         bindFunc(cast(void**)&dGetReallocHandler, "dGetReallocHandler");
259         bindFunc(cast(void**)&dGetFreeHandler, "dGetFreeHandler");
260         bindFunc(cast(void**)&dAlloc, "dAlloc");
261         bindFunc(cast(void**)&dRealloc, "dRealloc");
262         bindFunc(cast(void**)&dFree, "dFree");
263 
264         // misc.h
265         bindFunc(cast(void**)&dTestRand, "dTestRand");
266         bindFunc(cast(void**)&dRand, "dRand");
267         bindFunc(cast(void**)&dRandGetSeed, "dRandGetSeed");
268         bindFunc(cast(void**)&dRandSetSeed, "dRandSetSeed");
269         bindFunc(cast(void**)&dRandInt, "dRandInt");
270         bindFunc(cast(void**)&dRandReal, "dRandReal");
271         //bindFunc(cast(void**)&dPrintMatrix, "dPrintMatrix");
272         bindFunc(cast(void**)&dMakeRandomVector, "dMakeRandomVector");
273         bindFunc(cast(void**)&dMakeRandomMatrix, "dMakeRandomMatrix");
274         bindFunc(cast(void**)&dClearUpperTriangle, "dClearUpperTriangle");
275         bindFunc(cast(void**)&dMaxDifference, "dMaxDifference");
276         bindFunc(cast(void**)&dMaxDifferenceLowerTriangle, "dMaxDifferenceLowerTriangle");
277 
278         // objects.h
279         bindFunc(cast(void**)&dWorldCreate, "dWorldCreate");
280         bindFunc(cast(void**)&dWorldDestroy, "dWorldDestroy");
281         bindFunc(cast(void**)&dWorldSetData, "dWorldSetData");
282         bindFunc(cast(void**)&dWorldGetData, "dWorldGetData");
283         bindFunc(cast(void**)&dWorldSetGravity, "dWorldSetGravity");
284         bindFunc(cast(void**)&dWorldGetGravity, "dWorldGetGravity");
285         bindFunc(cast(void**)&dWorldSetERP, "dWorldSetERP");
286         bindFunc(cast(void**)&dWorldGetERP, "dWorldGetERP");
287         bindFunc(cast(void**)&dWorldSetCFM, "dWorldSetCFM");
288         bindFunc(cast(void**)&dWorldGetCFM, "dWorldGetCFM");
289         bindFunc(cast(void**)&dWorldUseSharedWorkingMemory, "dWorldUseSharedWorkingMemory");
290         bindFunc(cast(void**)&dWorldSetStepIslandsProcessingMaxThreadCount, "dWorldSetStepIslandsProcessingMaxThreadCount");
291         bindFunc(cast(void**)&dWorldGetStepIslandsProcessingMaxThreadCount, "dWorldGetStepIslandsProcessingMaxThreadCount");
292         bindFunc(cast(void**)&dWorldCleanupWorkingMemory, "dWorldCleanupWorkingMemory");
293         bindFunc(cast(void**)&dWorldSetStepMemoryReservationPolicy, "dWorldSetStepMemoryReservationPolicy");
294         bindFunc(cast(void**)&dWorldSetStepMemoryManager, "dWorldSetStepMemoryManager");
295         bindFunc(cast(void**)&dWorldSetStepThreadingImplementation, "dWorldSetStepThreadingImplementation");
296         bindFunc(cast(void**)&dWorldStep, "dWorldStep");
297         bindFunc(cast(void**)&dWorldImpulseToForce, "dWorldImpulseToForce");
298         bindFunc(cast(void**)&dWorldQuickStep, "dWorldQuickStep");
299         bindFunc(cast(void**)&dWorldSetQuickStepNumIterations, "dWorldSetQuickStepNumIterations");
300         bindFunc(cast(void**)&dWorldGetQuickStepNumIterations, "dWorldGetQuickStepNumIterations");
301         bindFunc(cast(void**)&dWorldSetQuickStepW, "dWorldSetQuickStepW");
302         bindFunc(cast(void**)&dWorldGetQuickStepW, "dWorldGetQuickStepW");
303         bindFunc(cast(void**)&dWorldSetContactMaxCorrectingVel, "dWorldSetContactMaxCorrectingVel");
304         bindFunc(cast(void**)&dWorldGetContactMaxCorrectingVel, "dWorldGetContactMaxCorrectingVel");
305         bindFunc(cast(void**)&dWorldSetContactSurfaceLayer, "dWorldSetContactSurfaceLayer");
306         bindFunc(cast(void**)&dWorldGetContactSurfaceLayer, "dWorldGetContactSurfaceLayer");
307         bindFunc(cast(void**)&dWorldGetAutoDisableLinearThreshold, "dWorldGetAutoDisableLinearThreshold");
308         bindFunc(cast(void**)&dWorldSetAutoDisableLinearThreshold, "dWorldSetAutoDisableLinearThreshold");
309         bindFunc(cast(void**)&dWorldGetAutoDisableAngularThreshold, "dWorldGetAutoDisableAngularThreshold");
310         bindFunc(cast(void**)&dWorldSetAutoDisableAngularThreshold, "dWorldSetAutoDisableAngularThreshold");
311         bindFunc(cast(void**)&dWorldGetAutoDisableAverageSamplesCount, "dWorldGetAutoDisableAverageSamplesCount");
312         bindFunc(cast(void**)&dWorldSetAutoDisableAverageSamplesCount, "dWorldSetAutoDisableAverageSamplesCount");
313         bindFunc(cast(void**)&dWorldGetAutoDisableSteps, "dWorldGetAutoDisableSteps");
314         bindFunc(cast(void**)&dWorldSetAutoDisableSteps, "dWorldSetAutoDisableSteps");
315         bindFunc(cast(void**)&dWorldGetAutoDisableTime, "dWorldGetAutoDisableTime");
316         bindFunc(cast(void**)&dWorldSetAutoDisableTime, "dWorldSetAutoDisableTime");
317         bindFunc(cast(void**)&dWorldGetAutoDisableFlag, "dWorldGetAutoDisableFlag");
318         bindFunc(cast(void**)&dWorldSetAutoDisableFlag, "dWorldSetAutoDisableFlag");
319         bindFunc(cast(void**)&dWorldGetLinearDampingThreshold, "dWorldGetLinearDampingThreshold");
320         bindFunc(cast(void**)&dWorldSetLinearDampingThreshold, "dWorldSetLinearDampingThreshold");
321         bindFunc(cast(void**)&dWorldGetAngularDampingThreshold, "dWorldGetAngularDampingThreshold");
322         bindFunc(cast(void**)&dWorldSetAngularDampingThreshold, "dWorldSetAngularDampingThreshold");
323         bindFunc(cast(void**)&dWorldGetLinearDamping, "dWorldGetLinearDamping");
324         bindFunc(cast(void**)&dWorldSetLinearDamping, "dWorldSetLinearDamping");
325         bindFunc(cast(void**)&dWorldGetAngularDamping, "dWorldGetAngularDamping");
326         bindFunc(cast(void**)&dWorldSetAngularDamping, "dWorldSetAngularDamping");
327         bindFunc(cast(void**)&dWorldSetDamping, "dWorldSetDamping");
328         bindFunc(cast(void**)&dWorldGetMaxAngularSpeed, "dWorldGetMaxAngularSpeed");
329         bindFunc(cast(void**)&dWorldSetMaxAngularSpeed, "dWorldSetMaxAngularSpeed");
330         bindFunc(cast(void**)&dBodyGetAutoDisableLinearThreshold, "dBodyGetAutoDisableLinearThreshold");
331         bindFunc(cast(void**)&dBodySetAutoDisableLinearThreshold, "dBodySetAutoDisableLinearThreshold");
332         bindFunc(cast(void**)&dBodyGetAutoDisableAngularThreshold, "dBodyGetAutoDisableAngularThreshold");
333         bindFunc(cast(void**)&dBodySetAutoDisableAngularThreshold, "dBodySetAutoDisableAngularThreshold");
334         bindFunc(cast(void**)&dBodyGetAutoDisableAverageSamplesCount, "dBodyGetAutoDisableAverageSamplesCount");
335         bindFunc(cast(void**)&dBodySetAutoDisableAverageSamplesCount, "dBodySetAutoDisableAverageSamplesCount");
336         bindFunc(cast(void**)&dBodyGetAutoDisableSteps, "dBodyGetAutoDisableSteps");
337         bindFunc(cast(void**)&dBodySetAutoDisableSteps, "dBodySetAutoDisableSteps");
338         bindFunc(cast(void**)&dBodyGetAutoDisableTime, "dBodyGetAutoDisableTime");
339         bindFunc(cast(void**)&dBodySetAutoDisableTime, "dBodySetAutoDisableTime");
340         bindFunc(cast(void**)&dBodyGetAutoDisableFlag, "dBodyGetAutoDisableFlag");
341         bindFunc(cast(void**)&dBodySetAutoDisableFlag, "dBodySetAutoDisableFlag");
342         bindFunc(cast(void**)&dBodySetAutoDisableDefaults, "dBodySetAutoDisableDefaults");
343         bindFunc(cast(void**)&dBodyGetWorld, "dBodyGetWorld");
344         bindFunc(cast(void**)&dBodyCreate, "dBodyCreate");
345         bindFunc(cast(void**)&dBodyDestroy, "dBodyDestroy");
346         bindFunc(cast(void**)&dBodySetData, "dBodySetData");
347         bindFunc(cast(void**)&dBodyGetData, "dBodyGetData");
348         bindFunc(cast(void**)&dBodySetPosition, "dBodySetPosition");
349         bindFunc(cast(void**)&dBodySetRotation, "dBodySetRotation");
350         bindFunc(cast(void**)&dBodySetQuaternion, "dBodySetQuaternion");
351         bindFunc(cast(void**)&dBodySetLinearVel, "dBodySetLinearVel");
352         bindFunc(cast(void**)&dBodySetAngularVel, "dBodySetAngularVel");
353         bindFunc(cast(void**)&dBodyGetPosition, "dBodyGetPosition");
354         bindFunc(cast(void**)&dBodyCopyPosition, "dBodyCopyPosition");
355         bindFunc(cast(void**)&dBodyGetRotation, "dBodyGetRotation");
356         bindFunc(cast(void**)&dBodyCopyRotation, "dBodyCopyRotation");
357         bindFunc(cast(void**)&dBodyGetQuaternion, "dBodyGetQuaternion");
358         bindFunc(cast(void**)&dBodyCopyQuaternion, "dBodyCopyQuaternion");
359         bindFunc(cast(void**)&dBodyGetLinearVel, "dBodyGetLinearVel");
360         bindFunc(cast(void**)&dBodyGetAngularVel, "dBodyGetAngularVel");
361         bindFunc(cast(void**)&dBodySetMass, "dBodySetMass");
362         bindFunc(cast(void**)&dBodyGetMass, "dBodyGetMass");
363         bindFunc(cast(void**)&dBodyAddForce, "dBodyAddForce");
364         bindFunc(cast(void**)&dBodyAddTorque, "dBodyAddTorque");
365         bindFunc(cast(void**)&dBodyAddRelForce, "dBodyAddRelForce");
366         bindFunc(cast(void**)&dBodyAddRelTorque, "dBodyAddRelTorque");
367         bindFunc(cast(void**)&dBodyAddForceAtPos, "dBodyAddForceAtPos");
368         bindFunc(cast(void**)&dBodyAddForceAtRelPos, "dBodyAddForceAtRelPos");
369         bindFunc(cast(void**)&dBodyAddRelForceAtPos, "dBodyAddRelForceAtPos");
370         bindFunc(cast(void**)&dBodyAddRelForceAtRelPos, "dBodyAddRelForceAtRelPos");
371         bindFunc(cast(void**)&dBodyGetForce, "dBodyGetForce");
372         bindFunc(cast(void**)&dBodyGetTorque, "dBodyGetTorque");
373         bindFunc(cast(void**)&dBodySetForce, "dBodySetForce");
374         bindFunc(cast(void**)&dBodySetTorque, "dBodySetTorque");
375         bindFunc(cast(void**)&dBodyGetRelPointPos, "dBodyGetRelPointPos");
376         bindFunc(cast(void**)&dBodyGetRelPointVel, "dBodyGetRelPointVel");
377         bindFunc(cast(void**)&dBodyGetPointVel, "dBodyGetPointVel");
378         bindFunc(cast(void**)&dBodyGetPosRelPoint, "dBodyGetPosRelPoint");
379         bindFunc(cast(void**)&dBodyVectorToWorld, "dBodyVectorToWorld");
380         bindFunc(cast(void**)&dBodyVectorFromWorld, "dBodyVectorFromWorld");
381         bindFunc(cast(void**)&dBodySetFiniteRotationMode, "dBodySetFiniteRotationMode");
382         bindFunc(cast(void**)&dBodySetFiniteRotationAxis, "dBodySetFiniteRotationAxis");
383         bindFunc(cast(void**)&dBodyGetFiniteRotationMode, "dBodyGetFiniteRotationMode");
384         bindFunc(cast(void**)&dBodyGetFiniteRotationAxis, "dBodyGetFiniteRotationAxis");
385         bindFunc(cast(void**)&dBodyGetNumJoints, "dBodyGetNumJoints");
386         bindFunc(cast(void**)&dBodyGetJoint, "dBodyGetJoint");
387         bindFunc(cast(void**)&dBodySetDynamic, "dBodySetDynamic");
388         bindFunc(cast(void**)&dBodySetKinematic, "dBodySetKinematic");
389         bindFunc(cast(void**)&dBodyIsKinematic, "dBodyIsKinematic");
390         bindFunc(cast(void**)&dBodyEnable, "dBodyEnable");
391         bindFunc(cast(void**)&dBodyDisable, "dBodyDisable");
392         bindFunc(cast(void**)&dBodyIsEnabled, "dBodyIsEnabled");
393         bindFunc(cast(void**)&dBodySetGravityMode, "dBodySetGravityMode");
394         bindFunc(cast(void**)&dBodyGetGravityMode, "dBodyGetGravityMode");
395         bindFunc(cast(void**)&dBodySetMovedCallback, "dBodySetMovedCallback");
396         bindFunc(cast(void**)&dBodyGetFirstGeom, "dBodyGetFirstGeom");
397         bindFunc(cast(void**)&dBodyGetNextGeom, "dBodyGetNextGeom");
398         bindFunc(cast(void**)&dBodySetDampingDefaults, "dBodySetDampingDefaults");
399         bindFunc(cast(void**)&dBodyGetLinearDamping, "dBodyGetLinearDamping");
400         bindFunc(cast(void**)&dBodySetLinearDamping, "dBodySetLinearDamping");
401         bindFunc(cast(void**)&dBodyGetAngularDamping, "dBodyGetAngularDamping");
402         bindFunc(cast(void**)&dBodySetAngularDamping, "dBodySetAngularDamping");
403         bindFunc(cast(void**)&dBodySetDamping, "dBodySetDamping");
404         bindFunc(cast(void**)&dBodyGetLinearDampingThreshold, "dBodyGetLinearDampingThreshold");
405         bindFunc(cast(void**)&dBodySetLinearDampingThreshold, "dBodySetLinearDampingThreshold");
406         bindFunc(cast(void**)&dBodyGetAngularDampingThreshold, "dBodyGetAngularDampingThreshold");
407         bindFunc(cast(void**)&dBodySetAngularDampingThreshold, "dBodySetAngularDampingThreshold");
408         bindFunc(cast(void**)&dBodyGetMaxAngularSpeed, "dBodyGetMaxAngularSpeed");
409         bindFunc(cast(void**)&dBodySetMaxAngularSpeed, "dBodySetMaxAngularSpeed");
410         bindFunc(cast(void**)&dBodyGetGyroscopicMode, "dBodyGetGyroscopicMode");
411         bindFunc(cast(void**)&dBodySetGyroscopicMode, "dBodySetGyroscopicMode");
412         bindFunc(cast(void**)&dJointCreateBall, "dJointCreateBall");
413         bindFunc(cast(void**)&dJointCreateHinge, "dJointCreateHinge");
414         bindFunc(cast(void**)&dJointCreateSlider, "dJointCreateSlider");
415         bindFunc(cast(void**)&dJointCreateContact, "dJointCreateContact");
416         bindFunc(cast(void**)&dJointCreateHinge2, "dJointCreateHinge2");
417         bindFunc(cast(void**)&dJointCreateUniversal, "dJointCreateUniversal");
418         bindFunc(cast(void**)&dJointCreatePR, "dJointCreatePR");
419         bindFunc(cast(void**)&dJointCreatePU, "dJointCreatePU");
420         bindFunc(cast(void**)&dJointCreatePiston, "dJointCreatePiston");
421         bindFunc(cast(void**)&dJointCreateFixed, "dJointCreateFixed");
422         bindFunc(cast(void**)&dJointCreateNull, "dJointCreateNull");
423         bindFunc(cast(void**)&dJointCreateAMotor, "dJointCreateAMotor");
424         bindFunc(cast(void**)&dJointCreateLMotor, "dJointCreateLMotor");
425         bindFunc(cast(void**)&dJointCreatePlane2D, "dJointCreatePlane2D");
426         bindFunc(cast(void**)&dJointCreateDBall, "dJointCreateDBall");
427         bindFunc(cast(void**)&dJointCreateDHinge, "dJointCreateDHinge");
428         bindFunc(cast(void**)&dJointCreateTransmission, "dJointCreateTransmission");
429         bindFunc(cast(void**)&dJointDestroy, "dJointDestroy");
430         bindFunc(cast(void**)&dJointGroupCreate, "dJointGroupCreate");
431         bindFunc(cast(void**)&dJointGroupDestroy, "dJointGroupDestroy");
432         bindFunc(cast(void**)&dJointGroupEmpty, "dJointGroupEmpty");
433         bindFunc(cast(void**)&dJointGetNumBodies, "dJointGetNumBodies");
434         bindFunc(cast(void**)&dJointAttach, "dJointAttach");
435         bindFunc(cast(void**)&dJointEnable, "dJointEnable");
436         bindFunc(cast(void**)&dJointDisable, "dJointDisable");
437         bindFunc(cast(void**)&dJointIsEnabled, "dJointIsEnabled");
438         bindFunc(cast(void**)&dJointSetData, "dJointSetData");
439         bindFunc(cast(void**)&dJointGetData, "dJointGetData");
440         bindFunc(cast(void**)&dJointGetType, "dJointGetType");
441         bindFunc(cast(void**)&dJointGetBody, "dJointGetBody");
442         bindFunc(cast(void**)&dJointSetFeedback, "dJointSetFeedback");
443         bindFunc(cast(void**)&dJointGetFeedback, "dJointGetFeedback");
444         bindFunc(cast(void**)&dJointSetBallAnchor, "dJointSetBallAnchor");
445         bindFunc(cast(void**)&dJointSetBallAnchor2, "dJointSetBallAnchor2");
446         bindFunc(cast(void**)&dJointSetBallParam, "dJointSetBallParam");
447         bindFunc(cast(void**)&dJointSetHingeAnchor, "dJointSetHingeAnchor");
448         bindFunc(cast(void**)&dJointSetHingeAnchorDelta, "dJointSetHingeAnchorDelta");
449         bindFunc(cast(void**)&dJointSetHingeAxis, "dJointSetHingeAxis");
450         bindFunc(cast(void**)&dJointSetHingeAxisOffset, "dJointSetHingeAxisOffset");
451         bindFunc(cast(void**)&dJointSetHingeParam, "dJointSetHingeParam");
452         bindFunc(cast(void**)&dJointAddHingeTorque, "dJointAddHingeTorque");
453         bindFunc(cast(void**)&dJointSetSliderAxis, "dJointSetSliderAxis");
454         bindFunc(cast(void**)&dJointSetSliderAxisDelta, "dJointSetSliderAxisDelta");
455         bindFunc(cast(void**)&dJointSetSliderParam, "dJointSetSliderParam");
456         bindFunc(cast(void**)&dJointAddSliderForce, "dJointAddSliderForce");
457         bindFunc(cast(void**)&dJointSetHinge2Anchor, "dJointSetHinge2Anchor");
458         bindFunc(cast(void**)&dJointSetHinge2Axes, "dJointSetHinge2Axes");
459         bindFunc(cast(void**)&dJointSetHinge2Param, "dJointSetHinge2Param");
460         bindFunc(cast(void**)&dJointAddHinge2Torques, "dJointAddHinge2Torques");
461         bindFunc(cast(void**)&dJointSetUniversalAnchor, "dJointSetUniversalAnchor");
462         bindFunc(cast(void**)&dJointSetUniversalAxis1, "dJointSetUniversalAxis1");
463         bindFunc(cast(void**)&dJointSetUniversalAxis1Offset, "dJointSetUniversalAxis1Offset");
464         bindFunc(cast(void**)&dJointSetUniversalAxis2, "dJointSetUniversalAxis2");
465         bindFunc(cast(void**)&dJointSetUniversalAxis2Offset, "dJointSetUniversalAxis2Offset");
466         bindFunc(cast(void**)&dJointSetUniversalParam, "dJointSetUniversalParam");
467         bindFunc(cast(void**)&dJointAddUniversalTorques, "dJointAddUniversalTorques");
468         bindFunc(cast(void**)&dJointSetPRAnchor, "dJointSetPRAnchor");
469         bindFunc(cast(void**)&dJointSetPRAxis1, "dJointSetPRAxis1");
470         bindFunc(cast(void**)&dJointSetPRAxis2, "dJointSetPRAxis2");
471         bindFunc(cast(void**)&dJointSetPRParam, "dJointSetPRParam");
472         bindFunc(cast(void**)&dJointAddPRTorque, "dJointAddPRTorque");
473         bindFunc(cast(void**)&dJointSetPUAnchor, "dJointSetPUAnchor");
474         bindFunc(cast(void**)&dJointSetPUAnchorOffset, "dJointSetPUAnchorOffset");
475         bindFunc(cast(void**)&dJointSetPUAxis1, "dJointSetPUAxis1");
476         bindFunc(cast(void**)&dJointSetPUAxis2, "dJointSetPUAxis2");
477         bindFunc(cast(void**)&dJointSetPUAxis3, "dJointSetPUAxis3");
478         bindFunc(cast(void**)&dJointSetPUAxisP, "dJointSetPUAxisP");
479         bindFunc(cast(void**)&dJointSetPUParam, "dJointSetPUParam");
480         bindFunc(cast(void**)&dJointSetPistonAnchor, "dJointSetPistonAnchor");
481         bindFunc(cast(void**)&dJointSetPistonAnchorOffset, "dJointSetPistonAnchorOffset");
482         bindFunc(cast(void**)&dJointSetPistonAxis, "dJointSetPistonAxis");
483         bindFunc(cast(void**)&dJointSetPistonParam, "dJointSetPistonParam");
484         bindFunc(cast(void**)&dJointAddPistonForce, "dJointAddPistonForce");
485         bindFunc(cast(void**)&dJointSetFixed, "dJointSetFixed");
486         bindFunc(cast(void**)&dJointSetFixedParam, "dJointSetFixedParam");
487         bindFunc(cast(void**)&dJointSetAMotorNumAxes, "dJointSetAMotorNumAxes");
488         bindFunc(cast(void**)&dJointSetAMotorAxis, "dJointSetAMotorAxis");
489         bindFunc(cast(void**)&dJointSetAMotorAngle, "dJointSetAMotorAngle");
490         bindFunc(cast(void**)&dJointSetAMotorParam, "dJointSetAMotorParam");
491         bindFunc(cast(void**)&dJointSetAMotorMode, "dJointSetAMotorMode");
492         bindFunc(cast(void**)&dJointAddAMotorTorques, "dJointAddAMotorTorques");
493         bindFunc(cast(void**)&dJointSetLMotorNumAxes, "dJointSetLMotorNumAxes");
494         bindFunc(cast(void**)&dJointSetLMotorAxis, "dJointSetLMotorAxis");
495         bindFunc(cast(void**)&dJointSetLMotorParam, "dJointSetLMotorParam");
496         bindFunc(cast(void**)&dJointSetPlane2DXParam, "dJointSetPlane2DXParam");
497         bindFunc(cast(void**)&dJointSetPlane2DYParam, "dJointSetPlane2DYParam");
498         bindFunc(cast(void**)&dJointSetPlane2DAngleParam, "dJointSetPlane2DAngleParam");
499         bindFunc(cast(void**)&dJointGetBallAnchor, "dJointGetBallAnchor");
500         bindFunc(cast(void**)&dJointGetBallAnchor2, "dJointGetBallAnchor2");
501         bindFunc(cast(void**)&dJointGetBallParam, "dJointGetBallParam");
502         bindFunc(cast(void**)&dJointGetHingeAnchor, "dJointGetHingeAnchor");
503         bindFunc(cast(void**)&dJointGetHingeAnchor2, "dJointGetHingeAnchor2");
504         bindFunc(cast(void**)&dJointGetHingeAxis, "dJointGetHingeAxis");
505         bindFunc(cast(void**)&dJointGetHingeParam, "dJointGetHingeParam");
506         bindFunc(cast(void**)&dJointGetHingeAngle, "dJointGetHingeAngle");
507         bindFunc(cast(void**)&dJointGetHingeAngleRate, "dJointGetHingeAngleRate");
508         bindFunc(cast(void**)&dJointGetSliderPosition, "dJointGetSliderPosition");
509         bindFunc(cast(void**)&dJointGetSliderPositionRate, "dJointGetSliderPositionRate");
510         bindFunc(cast(void**)&dJointGetSliderAxis, "dJointGetSliderAxis");
511         bindFunc(cast(void**)&dJointGetSliderParam, "dJointGetSliderParam");
512         bindFunc(cast(void**)&dJointGetHinge2Anchor, "dJointGetHinge2Anchor");
513         bindFunc(cast(void**)&dJointGetHinge2Anchor2, "dJointGetHinge2Anchor2");
514         bindFunc(cast(void**)&dJointGetHinge2Axis1, "dJointGetHinge2Axis1");
515         bindFunc(cast(void**)&dJointGetHinge2Axis2, "dJointGetHinge2Axis2");
516         bindFunc(cast(void**)&dJointGetHinge2Param, "dJointGetHinge2Param");
517         bindFunc(cast(void**)&dJointGetHinge2Angle1, "dJointGetHinge2Angle1");
518         bindFunc(cast(void**)&dJointGetHinge2Angle2, "dJointGetHinge2Angle2");
519         bindFunc(cast(void**)&dJointGetHinge2Angle1Rate, "dJointGetHinge2Angle1Rate");
520         bindFunc(cast(void**)&dJointGetHinge2Angle2Rate, "dJointGetHinge2Angle2Rate");
521         bindFunc(cast(void**)&dJointGetUniversalAnchor, "dJointGetUniversalAnchor");
522         bindFunc(cast(void**)&dJointGetUniversalAnchor2, "dJointGetUniversalAnchor2");
523         bindFunc(cast(void**)&dJointGetUniversalAxis1, "dJointGetUniversalAxis1");
524         bindFunc(cast(void**)&dJointGetUniversalAxis2, "dJointGetUniversalAxis2");
525         bindFunc(cast(void**)&dJointGetUniversalParam, "dJointGetUniversalParam");
526         bindFunc(cast(void**)&dJointGetUniversalAngles, "dJointGetUniversalAngles");
527         bindFunc(cast(void**)&dJointGetUniversalAngle1, "dJointGetUniversalAngle1");
528         bindFunc(cast(void**)&dJointGetUniversalAngle2, "dJointGetUniversalAngle2");
529         bindFunc(cast(void**)&dJointGetUniversalAngle1Rate, "dJointGetUniversalAngle1Rate");
530         bindFunc(cast(void**)&dJointGetUniversalAngle2Rate, "dJointGetUniversalAngle2Rate");
531         bindFunc(cast(void**)&dJointGetPRAnchor, "dJointGetPRAnchor");
532         bindFunc(cast(void**)&dJointGetPRPosition, "dJointGetPRPosition");
533         bindFunc(cast(void**)&dJointGetPRPositionRate, "dJointGetPRPositionRate");
534         bindFunc(cast(void**)&dJointGetPRAngle, "dJointGetPRAngle");
535         bindFunc(cast(void**)&dJointGetPRAngleRate, "dJointGetPRAngleRate");
536         bindFunc(cast(void**)&dJointGetPRAxis1, "dJointGetPRAxis1");
537         bindFunc(cast(void**)&dJointGetPRAxis2, "dJointGetPRAxis2");
538         bindFunc(cast(void**)&dJointGetPRParam, "dJointGetPRParam");
539         bindFunc(cast(void**)&dJointGetPUAnchor, "dJointGetPUAnchor");
540         bindFunc(cast(void**)&dJointGetPUPosition, "dJointGetPUPosition");
541         bindFunc(cast(void**)&dJointGetPUPositionRate, "dJointGetPUPositionRate");
542         bindFunc(cast(void**)&dJointGetPUAxis1, "dJointGetPUAxis1");
543         bindFunc(cast(void**)&dJointGetPUAxis2, "dJointGetPUAxis2");
544         bindFunc(cast(void**)&dJointGetPUAxis3, "dJointGetPUAxis3");
545         bindFunc(cast(void**)&dJointGetPUAxisP, "dJointGetPUAxisP");
546         bindFunc(cast(void**)&dJointGetPUAngles, "dJointGetPUAngles");
547         bindFunc(cast(void**)&dJointGetPUAngle1, "dJointGetPUAngle1");
548         bindFunc(cast(void**)&dJointGetPUAngle1Rate, "dJointGetPUAngle1Rate");
549         bindFunc(cast(void**)&dJointGetPUAngle2, "dJointGetPUAngle2");
550         bindFunc(cast(void**)&dJointGetPUAngle2Rate, "dJointGetPUAngle2Rate");
551         bindFunc(cast(void**)&dJointGetPUParam, "dJointGetPUParam");
552         bindFunc(cast(void**)&dJointGetPistonPosition, "dJointGetPistonPosition");
553         bindFunc(cast(void**)&dJointGetPistonPositionRate, "dJointGetPistonPositionRate");
554         bindFunc(cast(void**)&dJointGetPistonAngle, "dJointGetPistonAngle");
555         bindFunc(cast(void**)&dJointGetPistonAngleRate, "dJointGetPistonAngleRate");
556         bindFunc(cast(void**)&dJointGetPistonAnchor, "dJointGetPistonAnchor");
557         bindFunc(cast(void**)&dJointGetPistonAnchor2, "dJointGetPistonAnchor2");
558         bindFunc(cast(void**)&dJointGetPistonAxis, "dJointGetPistonAxis");
559         bindFunc(cast(void**)&dJointGetPistonParam, "dJointGetPistonParam");
560         bindFunc(cast(void**)&dJointGetAMotorNumAxes, "dJointGetAMotorNumAxes");
561         bindFunc(cast(void**)&dJointGetAMotorAxis, "dJointGetAMotorAxis");
562         bindFunc(cast(void**)&dJointGetAMotorAxisRel, "dJointGetAMotorAxisRel");
563         bindFunc(cast(void**)&dJointGetAMotorAngle, "dJointGetAMotorAngle");
564         bindFunc(cast(void**)&dJointGetAMotorAngleRate, "dJointGetAMotorAngleRate");
565         bindFunc(cast(void**)&dJointGetAMotorParam, "dJointGetAMotorParam");
566         bindFunc(cast(void**)&dJointGetAMotorMode, "dJointGetAMotorMode");
567         bindFunc(cast(void**)&dJointGetLMotorNumAxes, "dJointGetLMotorNumAxes");
568         bindFunc(cast(void**)&dJointGetLMotorAxis, "dJointGetLMotorAxis");
569         bindFunc(cast(void**)&dJointGetLMotorParam, "dJointGetLMotorParam");
570         bindFunc(cast(void**)&dJointGetFixedParam, "dJointGetFixedParam");
571         bindFunc(cast(void**)&dJointGetTransmissionContactPoint1, "dJointGetTransmissionContactPoint1");
572         bindFunc(cast(void**)&dJointGetTransmissionContactPoint2, "dJointGetTransmissionContactPoint2");
573         bindFunc(cast(void**)&dJointSetTransmissionAxis1, "dJointSetTransmissionAxis1");
574         bindFunc(cast(void**)&dJointGetTransmissionAxis1, "dJointGetTransmissionAxis1");
575         bindFunc(cast(void**)&dJointSetTransmissionAxis2, "dJointSetTransmissionAxis2");
576         bindFunc(cast(void**)&dJointGetTransmissionAxis2, "dJointGetTransmissionAxis2");
577         bindFunc(cast(void**)&dJointSetTransmissionAnchor1, "dJointSetTransmissionAnchor1");
578         bindFunc(cast(void**)&dJointGetTransmissionAnchor1, "dJointGetTransmissionAnchor1");
579         bindFunc(cast(void**)&dJointSetTransmissionAnchor2, "dJointSetTransmissionAnchor2");
580         bindFunc(cast(void**)&dJointGetTransmissionAnchor2, "dJointGetTransmissionAnchor2");
581         bindFunc(cast(void**)&dJointSetTransmissionParam, "dJointSetTransmissionParam");
582         bindFunc(cast(void**)&dJointGetTransmissionParam, "dJointGetTransmissionParam");
583         bindFunc(cast(void**)&dJointSetTransmissionMode, "dJointSetTransmissionMode");
584         bindFunc(cast(void**)&dJointGetTransmissionMode, "dJointGetTransmissionMode");
585         bindFunc(cast(void**)&dJointSetTransmissionRatio, "dJointSetTransmissionRatio");
586         bindFunc(cast(void**)&dJointGetTransmissionRatio, "dJointGetTransmissionRatio");
587         bindFunc(cast(void**)&dJointSetTransmissionAxis, "dJointSetTransmissionAxis");
588         bindFunc(cast(void**)&dJointGetTransmissionAxis, "dJointGetTransmissionAxis");
589         bindFunc(cast(void**)&dJointGetTransmissionAngle1, "dJointGetTransmissionAngle1");
590         bindFunc(cast(void**)&dJointGetTransmissionAngle2, "dJointGetTransmissionAngle2");
591         bindFunc(cast(void**)&dJointGetTransmissionRadius1, "dJointGetTransmissionRadius1");
592         bindFunc(cast(void**)&dJointGetTransmissionRadius2, "dJointGetTransmissionRadius2");
593         bindFunc(cast(void**)&dJointSetTransmissionRadius1, "dJointSetTransmissionRadius1");
594         bindFunc(cast(void**)&dJointSetTransmissionRadius2, "dJointSetTransmissionRadius2");
595         bindFunc(cast(void**)&dJointGetTransmissionBacklash, "dJointGetTransmissionBacklash");
596         bindFunc(cast(void**)&dJointSetTransmissionBacklash, "dJointSetTransmissionBacklash");
597         bindFunc(cast(void**)&dJointSetDBallAnchor1, "dJointSetDBallAnchor1");
598         bindFunc(cast(void**)&dJointSetDBallAnchor2, "dJointSetDBallAnchor2");
599         bindFunc(cast(void**)&dJointGetDBallAnchor1, "dJointGetDBallAnchor1");
600         bindFunc(cast(void**)&dJointGetDBallAnchor2, "dJointGetDBallAnchor2");
601         bindFunc(cast(void**)&dJointGetDBallDistance, "dJointGetDBallDistance");
602         bindFunc(cast(void**)&dJointSetDBallParam, "dJointSetDBallParam");
603         bindFunc(cast(void**)&dJointGetDBallParam, "dJointGetDBallParam");
604         bindFunc(cast(void**)&dJointSetDHingeAxis, "dJointSetDHingeAxis");
605         bindFunc(cast(void**)&dJointGetDHingeAxis, "dJointGetDHingeAxis");
606         bindFunc(cast(void**)&dJointSetDHingeAnchor1, "dJointSetDHingeAnchor1");
607         bindFunc(cast(void**)&dJointSetDHingeAnchor2, "dJointSetDHingeAnchor2");
608         bindFunc(cast(void**)&dJointGetDHingeAnchor1, "dJointGetDHingeAnchor1");
609         bindFunc(cast(void**)&dJointGetDHingeAnchor2, "dJointGetDHingeAnchor2");
610         bindFunc(cast(void**)&dJointGetDHingeDistance, "dJointGetDHingeDistance");
611         bindFunc(cast(void**)&dJointSetDHingeParam, "dJointSetDHingeParam");
612         bindFunc(cast(void**)&dJointGetDHingeParam, "dJointGetDHingeParam");
613         bindFunc(cast(void**)&dConnectingJoint, "dConnectingJoint");
614         bindFunc(cast(void**)&dConnectingJointList, "dConnectingJointList");
615         bindFunc(cast(void**)&dAreConnected, "dAreConnected");
616         bindFunc(cast(void**)&dAreConnectedExcluding, "dAreConnectedExcluding");
617 
618         // odeinit.h
619         bindFunc(cast(void**)&dInitODE, "dInitODE");
620         bindFunc(cast(void**)&dInitODE2, "dInitODE2");
621         bindFunc(cast(void**)&dAllocateODEDataForThread, "dAllocateODEDataForThread");
622         bindFunc(cast(void**)&dCleanupODEAllDataForThread, "dCleanupODEAllDataForThread");
623         bindFunc(cast(void**)&dCloseODE, "dCloseODE");
624 
625         // odemath.h
626         bindFunc(cast(void**)&dSafeNormalize3, "dSafeNormalize3");
627         bindFunc(cast(void**)&dSafeNormalize4, "dSafeNormalize4");
628         bindFunc(cast(void**)&dNormalize3, "dNormalize3");
629         bindFunc(cast(void**)&dNormalize4, "dNormalize4");
630         bindFunc(cast(void**)&dPlaneSpace, "dPlaneSpace");
631         bindFunc(cast(void**)&dOrthogonalizeR, "dOrthogonalizeR");
632 
633         // rotation.h
634         bindFunc(cast(void**)&dRSetIdentity, "dRSetIdentity");
635         bindFunc(cast(void**)&dRFromAxisAndAngle, "dRFromAxisAndAngle");
636         bindFunc(cast(void**)&dRFromEulerAngles, "dRFromEulerAngles");
637         bindFunc(cast(void**)&dRFrom2Axes, "dRFrom2Axes");
638         bindFunc(cast(void**)&dRFromZAxis, "dRFromZAxis");
639         bindFunc(cast(void**)&dQSetIdentity, "dQSetIdentity");
640         bindFunc(cast(void**)&dQFromAxisAndAngle, "dQFromAxisAndAngle");
641         bindFunc(cast(void**)&dQMultiply0, "dQMultiply0");
642         bindFunc(cast(void**)&dQMultiply1, "dQMultiply1");
643         bindFunc(cast(void**)&dQMultiply2, "dQMultiply2");
644         bindFunc(cast(void**)&dQMultiply3, "dQMultiply3");
645         bindFunc(cast(void**)&dRfromQ, "dRfromQ");
646         bindFunc(cast(void**)&dQfromR, "dQfromR");
647         bindFunc(cast(void**)&dDQfromW, "dDQfromW");
648 
649         // timer.h
650         bindFunc(cast(void**)&dStopwatchReset, "dStopwatchReset");
651         bindFunc(cast(void**)&dStopwatchStart, "dStopwatchStart");
652         bindFunc(cast(void**)&dStopwatchStop, "dStopwatchStop");
653         bindFunc(cast(void**)&dStopwatchTime, "dStopwatchTime");
654         bindFunc(cast(void**)&dTimerStart, "dTimerStart");
655         bindFunc(cast(void**)&dTimerNow, "dTimerNow");
656         bindFunc(cast(void**)&dTimerEnd, "dTimerEnd");
657         bindFunc(cast(void**)&dTimerReport, "dTimerReport");
658         bindFunc(cast(void**)&dTimerTicksPerSecond, "dTimerTicksPerSecond");
659         bindFunc(cast(void**)&dTimerResolution, "dTimerResolution");
660     }
661 }
662 
663 __gshared DerelictODELoader DerelictODE;
664 
665 shared static this() 
666 {
667     DerelictODE = new DerelictODELoader();
668 }
669 
670 private:
671     static if(Derelict_OS_Windows) {
672         static if(dDOUBLE)
673             enum libNames = "ode_double.dll,ode_doubled.dll,ode.dll";
674         else
675             enum libNames = "ode_single.dll,ode_singled.dll,ode.dll";
676     }
677     else static if(Derelict_OS_Mac) {
678         static if(dDOUBLE)
679             enum libNames = "libode_double.dylib,libode_doubled.dylib,libode.dylib";
680         else
681             enum libNames = "libode_single.dylib,libode_singled.dylib,libode.dylib";
682     }
683     else static if(Derelict_OS_Posix) {
684         static if(dDOUBLE)
685             enum libNames = "libode-double.so,libode_double.so,libode_doubled.so,libode.so,libode.so.3";
686         else
687             enum libNames = "libode_single.so,libode_singled.so,libode.so,libode.so.3";
688     }
689     else
690         static assert(0, "Need to implement ODE libNames for this operating system.");