diff options
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs')
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs | 115 |
1 files changed, 99 insertions, 16 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs b/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs index 504bd3c..a0bad3a 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs | |||
@@ -33,15 +33,25 @@ using OpenMetaverse; | |||
33 | namespace OpenSim.Region.Physics.BulletSPlugin { | 33 | namespace OpenSim.Region.Physics.BulletSPlugin { |
34 | 34 | ||
35 | // Classes to allow some type checking for the API | 35 | // Classes to allow some type checking for the API |
36 | // These hold pointers to allocated objects in the unmanaged space. | ||
37 | |||
38 | // The physics engine controller class created at initialization | ||
36 | public struct BulletSim | 39 | public struct BulletSim |
37 | { | 40 | { |
38 | public BulletSim(uint id, BSScene bss, IntPtr xx) { ID = id; scene = bss; Ptr = xx; } | 41 | public BulletSim(uint worldId, BSScene bss, IntPtr xx) { worldID = worldId; scene = bss; Ptr = xx; } |
39 | public uint ID; | 42 | public uint worldID; |
40 | // The scene is only in here so very low level routines have a handle to print debug/error messages | 43 | // The scene is only in here so very low level routines have a handle to print debug/error messages |
41 | public BSScene scene; | 44 | public BSScene scene; |
42 | public IntPtr Ptr; | 45 | public IntPtr Ptr; |
43 | } | 46 | } |
44 | 47 | ||
48 | public struct BulletShape | ||
49 | { | ||
50 | public BulletShape(IntPtr xx) { Ptr = xx; } | ||
51 | public IntPtr Ptr; | ||
52 | } | ||
53 | |||
54 | // An allocated Bullet btRigidBody | ||
45 | public struct BulletBody | 55 | public struct BulletBody |
46 | { | 56 | { |
47 | public BulletBody(uint id, IntPtr xx) { ID = id; Ptr = xx; } | 57 | public BulletBody(uint id, IntPtr xx) { ID = id; Ptr = xx; } |
@@ -49,12 +59,41 @@ public struct BulletBody | |||
49 | public uint ID; | 59 | public uint ID; |
50 | } | 60 | } |
51 | 61 | ||
62 | // An allocated Bullet btConstraint | ||
52 | public struct BulletConstraint | 63 | public struct BulletConstraint |
53 | { | 64 | { |
54 | public BulletConstraint(IntPtr xx) { Ptr = xx; } | 65 | public BulletConstraint(IntPtr xx) { Ptr = xx; } |
55 | public IntPtr Ptr; | 66 | public IntPtr Ptr; |
56 | } | 67 | } |
57 | 68 | ||
69 | // An allocated HeightMapThing which hold various heightmap info | ||
70 | // Made a class rather than a struct so there would be only one | ||
71 | // instance of this and C# will pass around pointers rather | ||
72 | // than making copies. | ||
73 | public class BulletHeightMapInfo | ||
74 | { | ||
75 | public BulletHeightMapInfo(uint id, float[] hm, IntPtr xx) { | ||
76 | ID = id; | ||
77 | Ptr = xx; | ||
78 | heightMap = hm; | ||
79 | terrainRegionBase = new Vector2(0f, 0f); | ||
80 | minCoords = new Vector3(100f, 100f, 25f); | ||
81 | maxCoords = new Vector3(101f, 101f, 26f); | ||
82 | minZ = maxZ = 0f; | ||
83 | sizeX = sizeY = 256f; | ||
84 | } | ||
85 | public uint ID; | ||
86 | public IntPtr Ptr; | ||
87 | public float[] heightMap; | ||
88 | public Vector2 terrainRegionBase; | ||
89 | public Vector3 minCoords; | ||
90 | public Vector3 maxCoords; | ||
91 | public float sizeX, sizeY; | ||
92 | public float minZ, maxZ; | ||
93 | public BulletShape terrainShape; | ||
94 | public BulletBody terrainBody; | ||
95 | } | ||
96 | |||
58 | // =============================================================================== | 97 | // =============================================================================== |
59 | [StructLayout(LayoutKind.Sequential)] | 98 | [StructLayout(LayoutKind.Sequential)] |
60 | public struct ConvexHull | 99 | public struct ConvexHull |
@@ -221,6 +260,10 @@ public enum ConstraintParamAxis : int | |||
221 | // =============================================================================== | 260 | // =============================================================================== |
222 | static class BulletSimAPI { | 261 | static class BulletSimAPI { |
223 | 262 | ||
263 | // Link back to the managed code for outputting log messages | ||
264 | [UnmanagedFunctionPointer(CallingConvention.Cdecl)] | ||
265 | public delegate void DebugLogCallback([MarshalAs(UnmanagedType.LPStr)]string msg); | ||
266 | |||
224 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 267 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
225 | [return: MarshalAs(UnmanagedType.LPStr)] | 268 | [return: MarshalAs(UnmanagedType.LPStr)] |
226 | public static extern string GetVersion(); | 269 | public static extern string GetVersion(); |
@@ -228,7 +271,11 @@ public static extern string GetVersion(); | |||
228 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 271 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
229 | public static extern uint Initialize(Vector3 maxPosition, IntPtr parms, | 272 | public static extern uint Initialize(Vector3 maxPosition, IntPtr parms, |
230 | int maxCollisions, IntPtr collisionArray, | 273 | int maxCollisions, IntPtr collisionArray, |
231 | int maxUpdates, IntPtr updateArray); | 274 | int maxUpdates, IntPtr updateArray, |
275 | DebugLogCallback logRoutine); | ||
276 | |||
277 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
278 | public static extern void CreateInitialGroundPlaneAndTerrain(uint worldID); | ||
232 | 279 | ||
233 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 280 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
234 | public static extern void SetHeightmap(uint worldID, [MarshalAs(UnmanagedType.LPArray)] float[] heightMap); | 281 | public static extern void SetHeightmap(uint worldID, [MarshalAs(UnmanagedType.LPArray)] float[] heightMap); |
@@ -342,8 +389,6 @@ public static extern Vector3 RecoverFromPenetration(uint worldID, uint id); | |||
342 | public static extern void DumpBulletStatistics(); | 389 | public static extern void DumpBulletStatistics(); |
343 | 390 | ||
344 | // Log a debug message | 391 | // Log a debug message |
345 | [UnmanagedFunctionPointer(CallingConvention.Cdecl)] | ||
346 | public delegate void DebugLogCallback([MarshalAs(UnmanagedType.LPStr)]string msg); | ||
347 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 392 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
348 | public static extern void SetDebugLogCallback(DebugLogCallback callback); | 393 | public static extern void SetDebugLogCallback(DebugLogCallback callback); |
349 | 394 | ||
@@ -377,7 +422,7 @@ public static extern IntPtr Initialize2(Vector3 maxPosition, IntPtr parms, | |||
377 | public static extern bool UpdateParameter2(IntPtr world, uint localID, String parm, float value); | 422 | public static extern bool UpdateParameter2(IntPtr world, uint localID, String parm, float value); |
378 | 423 | ||
379 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 424 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
380 | public static extern void SetHeightmap2(IntPtr world, float[] heightmap); | 425 | public static extern void SetHeightMap2(IntPtr world, float[] heightmap); |
381 | 426 | ||
382 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 427 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
383 | public static extern void Shutdown2(IntPtr sim); | 428 | public static extern void Shutdown2(IntPtr sim); |
@@ -392,24 +437,54 @@ public static extern int PhysicsStep2(IntPtr world, float timeStep, int maxSubSt | |||
392 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 437 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
393 | public static extern bool PushUpdate2(IntPtr obj); | 438 | public static extern bool PushUpdate2(IntPtr obj); |
394 | 439 | ||
395 | /* | 440 | // ===================================================================================== |
396 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 441 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
397 | public static extern IntPtr CreateMesh2(IntPtr world, int indicesCount, int* indices, int verticesCount, float* vertices ); | 442 | public static extern IntPtr CreateMeshShape2(IntPtr world, |
443 | int indicesCount, [MarshalAs(UnmanagedType.LPArray)] int[] indices, | ||
444 | int verticesCount, [MarshalAs(UnmanagedType.LPArray)] float[] vertices ); | ||
398 | 445 | ||
399 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 446 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
400 | public static extern bool BuildHull2(IntPtr world, IntPtr mesh); | 447 | public static extern IntPtr CreateHullShape2(IntPtr world, |
448 | int hullCount, [MarshalAs(UnmanagedType.LPArray)] float[] hulls); | ||
401 | 449 | ||
402 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 450 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
403 | public static extern bool ReleaseHull2(IntPtr world, IntPtr mesh); | 451 | public static extern IntPtr BuildHullShape2(IntPtr world, IntPtr meshShape); |
404 | 452 | ||
405 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 453 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
406 | public static extern bool DestroyMesh2(IntPtr world, IntPtr mesh); | 454 | public static extern IntPtr BuildNativeShape2(IntPtr world, |
455 | float shapeType, float collisionMargin, Vector3 scale); | ||
407 | 456 | ||
408 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 457 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
409 | public static extern IntPtr CreateObject2(IntPtr world, ShapeData shapeData); | 458 | public static extern bool DeleteCollisionShape2(IntPtr world, IntPtr shape); |
410 | */ | ||
411 | 459 | ||
412 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 460 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
461 | public static extern IntPtr CreateBodyFromShape2(IntPtr sim, IntPtr shape, Vector3 pos, Quaternion rot); | ||
462 | |||
463 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
464 | public static extern IntPtr CreateBodyWithDefaultMotionState2(IntPtr shape, Vector3 pos, Quaternion rot); | ||
465 | |||
466 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
467 | public static extern bool SetBodyShape2(IntPtr sim, IntPtr obj, IntPtr shape); | ||
468 | // ===================================================================================== | ||
469 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
470 | public static extern IntPtr CreateHeightMapInfo2(IntPtr sim, uint id, Vector3 minCoords, Vector3 maxCoords, | ||
471 | [MarshalAs(UnmanagedType.LPArray)] float[] heightMap, float collisionMargin); | ||
472 | |||
473 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
474 | public static extern IntPtr FillHeightMapInfo2(IntPtr sim, IntPtr mapInfo, uint id, Vector3 minCoords, Vector3 maxCoords, | ||
475 | [MarshalAs(UnmanagedType.LPArray)] float[] heightMap, float collisionMargin); | ||
476 | |||
477 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
478 | public static extern bool ReleaseHeightMapInfo2(IntPtr heightMapInfo); | ||
479 | |||
480 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
481 | public static extern IntPtr CreateGroundPlaneShape2(uint id, float height, float collisionMargin); | ||
482 | |||
483 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
484 | public static extern IntPtr CreateTerrainShape2(IntPtr mapInfo); | ||
485 | |||
486 | // ===================================================================================== | ||
487 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
413 | public static extern IntPtr Create6DofConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2, | 488 | public static extern IntPtr Create6DofConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2, |
414 | Vector3 frame1loc, Quaternion frame1rot, | 489 | Vector3 frame1loc, Quaternion frame1rot, |
415 | Vector3 frame2loc, Quaternion frame2rot, | 490 | Vector3 frame2loc, Quaternion frame2rot, |
@@ -460,11 +535,16 @@ public static extern bool SetConstraintParam2(IntPtr constrain, ConstraintParams | |||
460 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 535 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
461 | public static extern bool DestroyConstraint2(IntPtr world, IntPtr constrain); | 536 | public static extern bool DestroyConstraint2(IntPtr world, IntPtr constrain); |
462 | 537 | ||
538 | // ===================================================================================== | ||
463 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 539 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
464 | public static extern Vector3 AddObjectToWorld2(IntPtr world, IntPtr obj); | 540 | public static extern bool AddObjectToWorld2(IntPtr world, IntPtr obj); |
465 | 541 | ||
466 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 542 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
467 | public static extern Vector3 RemoveObjectFromWorld2(IntPtr world, IntPtr obj); | 543 | public static extern bool RemoveObjectFromWorld2(IntPtr world, IntPtr obj); |
544 | |||
545 | // ===================================================================================== | ||
546 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
547 | public static extern void Activate2(IntPtr obj, bool forceActivation); | ||
468 | 548 | ||
469 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 549 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
470 | public static extern Vector3 GetPosition2(IntPtr obj); | 550 | public static extern Vector3 GetPosition2(IntPtr obj); |
@@ -509,6 +589,9 @@ public static extern bool SetContactProcessingThreshold2(IntPtr obj, float val); | |||
509 | public static extern bool SetFriction2(IntPtr obj, float val); | 589 | public static extern bool SetFriction2(IntPtr obj, float val); |
510 | 590 | ||
511 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 591 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
592 | public static extern bool SetHitFraction2(IntPtr obj, float val); | ||
593 | |||
594 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | ||
512 | public static extern bool SetRestitution2(IntPtr obj, float val); | 595 | public static extern bool SetRestitution2(IntPtr obj, float val); |
513 | 596 | ||
514 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 597 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
@@ -551,7 +634,7 @@ public static extern bool SetMargin2(IntPtr obj, float val); | |||
551 | public static extern bool UpdateSingleAabb2(IntPtr world, IntPtr obj); | 634 | public static extern bool UpdateSingleAabb2(IntPtr world, IntPtr obj); |
552 | 635 | ||
553 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 636 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
554 | public static extern bool DestroyObject2(IntPtr world, uint id); | 637 | public static extern bool DestroyObject2(IntPtr world, IntPtr obj); |
555 | 638 | ||
556 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] | 639 | [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] |
557 | public static extern void DumpPhysicsStatistics2(IntPtr sim); | 640 | public static extern void DumpPhysicsStatistics2(IntPtr sim); |