diff options
author | teravus | 2013-01-20 08:06:15 -0500 |
---|---|---|
committer | teravus | 2013-01-20 08:06:15 -0500 |
commit | 82b954b2125acf3c3647422fbbe543e96b6d4e91 (patch) | |
tree | ae08205fd7bc81c9849325d3f091cb26ca576043 | |
parent | * Allow unsafe code with BulletSim (diff) | |
download | opensim-SC-82b954b2125acf3c3647422fbbe543e96b6d4e91.zip opensim-SC-82b954b2125acf3c3647422fbbe543e96b6d4e91.tar.gz opensim-SC-82b954b2125acf3c3647422fbbe543e96b6d4e91.tar.bz2 opensim-SC-82b954b2125acf3c3647422fbbe543e96b6d4e91.tar.xz |
* Tweak the BulletSimN API a bit.
-rw-r--r-- | OpenSim/Region/Physics/BulletSNPlugin/BSScene.cs | 8 | ||||
-rw-r--r-- | OpenSim/Region/Physics/BulletSNPlugin/BulletSimAPI.cs | 27 |
2 files changed, 18 insertions, 17 deletions
diff --git a/OpenSim/Region/Physics/BulletSNPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSNPlugin/BSScene.cs index 1a7c34b..4fc3e2a 100644 --- a/OpenSim/Region/Physics/BulletSNPlugin/BSScene.cs +++ b/OpenSim/Region/Physics/BulletSNPlugin/BSScene.cs | |||
@@ -106,11 +106,11 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
106 | 106 | ||
107 | // Pinned memory used to pass step information between managed and unmanaged | 107 | // Pinned memory used to pass step information between managed and unmanaged |
108 | internal int m_maxCollisionsPerFrame; | 108 | internal int m_maxCollisionsPerFrame; |
109 | private List<BulletXNA.CollisionDesc> m_collisionArray; | 109 | private BulletXNA.CollisionDesc[] m_collisionArray; |
110 | //private GCHandle m_collisionArrayPinnedHandle; | 110 | //private GCHandle m_collisionArrayPinnedHandle; |
111 | 111 | ||
112 | internal int m_maxUpdatesPerFrame; | 112 | internal int m_maxUpdatesPerFrame; |
113 | private List<BulletXNA.EntityProperties> m_updateArray; | 113 | private BulletXNA.EntityProperties[] m_updateArray; |
114 | //private GCHandle m_updateArrayPinnedHandle; | 114 | //private GCHandle m_updateArrayPinnedHandle; |
115 | 115 | ||
116 | 116 | ||
@@ -201,9 +201,9 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
201 | GetInitialParameterValues(config); | 201 | GetInitialParameterValues(config); |
202 | 202 | ||
203 | // allocate more pinned memory close to the above in an attempt to get the memory all together | 203 | // allocate more pinned memory close to the above in an attempt to get the memory all together |
204 | m_collisionArray = new List<BulletXNA.CollisionDesc>(); | 204 | m_collisionArray = new BulletXNA.CollisionDesc[0]; |
205 | //m_collisionArrayPinnedHandle = GCHandle.Alloc(m_collisionArray, GCHandleType.Pinned); | 205 | //m_collisionArrayPinnedHandle = GCHandle.Alloc(m_collisionArray, GCHandleType.Pinned); |
206 | m_updateArray = new List<BulletXNA.EntityProperties>(); | 206 | m_updateArray = new BulletXNA.EntityProperties[0]; |
207 | //m_updateArrayPinnedHandle = GCHandle.Alloc(m_updateArray, GCHandleType.Pinned); | 207 | //m_updateArrayPinnedHandle = GCHandle.Alloc(m_updateArray, GCHandleType.Pinned); |
208 | 208 | ||
209 | // Enable very detailed logging. | 209 | // Enable very detailed logging. |
diff --git a/OpenSim/Region/Physics/BulletSNPlugin/BulletSimAPI.cs b/OpenSim/Region/Physics/BulletSNPlugin/BulletSimAPI.cs index 93643c9..ba96905 100644 --- a/OpenSim/Region/Physics/BulletSNPlugin/BulletSimAPI.cs +++ b/OpenSim/Region/Physics/BulletSNPlugin/BulletSimAPI.cs | |||
@@ -894,7 +894,7 @@ static class BulletSimAPI { | |||
894 | return capsuleShapeZ; | 894 | return capsuleShapeZ; |
895 | } | 895 | } |
896 | 896 | ||
897 | public static object Initialize2(Vector3 worldExtent, ConfigurationParameters[] o, int mMaxCollisionsPerFrame, ref List<BulletXNA.CollisionDesc> collisionArray, int mMaxUpdatesPerFrame, ref List<BulletXNA.EntityProperties> updateArray, object mDebugLogCallbackHandle) | 897 | public static object Initialize2(Vector3 worldExtent, ConfigurationParameters[] o, int mMaxCollisionsPerFrame, ref BulletXNA.CollisionDesc[] collisionArray, int mMaxUpdatesPerFrame, ref BulletXNA.EntityProperties[] updateArray, object mDebugLogCallbackHandle) |
898 | { | 898 | { |
899 | CollisionWorld.WorldData.ParamData p = new CollisionWorld.WorldData.ParamData(); | 899 | CollisionWorld.WorldData.ParamData p = new CollisionWorld.WorldData.ParamData(); |
900 | 900 | ||
@@ -1436,14 +1436,14 @@ static class BulletSimAPI { | |||
1436 | 1436 | ||
1437 | } | 1437 | } |
1438 | 1438 | ||
1439 | internal static int PhysicsStep2(object pWorld, float timeStep, int m_maxSubSteps, float m_fixedTimeStep, out int updatedEntityCount, out List<BulletXNA.EntityProperties> updatedEntities, out int collidersCount, out List<BulletXNA.CollisionDesc>colliders) | 1439 | internal static int PhysicsStep2(object pWorld, float timeStep, int m_maxSubSteps, float m_fixedTimeStep, out int updatedEntityCount, out BulletXNA.EntityProperties[] updatedEntities, out int collidersCount, out BulletXNA.CollisionDesc[] colliders) |
1440 | { | 1440 | { |
1441 | int epic = PhysicsStepint2(pWorld, timeStep, m_maxSubSteps, m_fixedTimeStep, out updatedEntityCount, out updatedEntities, | 1441 | int epic = PhysicsStepint2(pWorld, timeStep, m_maxSubSteps, m_fixedTimeStep, out updatedEntityCount, out updatedEntities, |
1442 | out collidersCount, out colliders); | 1442 | out collidersCount, out colliders); |
1443 | return epic; | 1443 | return epic; |
1444 | } | 1444 | } |
1445 | 1445 | ||
1446 | private static int PhysicsStepint2(object pWorld,float timeStep, int m_maxSubSteps, float m_fixedTimeStep, out int updatedEntityCount, out List<BulletXNA.EntityProperties> updatedEntities, out int collidersCount, out List<BulletXNA.CollisionDesc> colliders) | 1446 | private static int PhysicsStepint2(object pWorld,float timeStep, int m_maxSubSteps, float m_fixedTimeStep, out int updatedEntityCount, out BulletXNA.EntityProperties[] updatedEntities, out int collidersCount, out BulletXNA.CollisionDesc[] colliders) |
1447 | { | 1447 | { |
1448 | int numSimSteps = 0; | 1448 | int numSimSteps = 0; |
1449 | 1449 | ||
@@ -1462,16 +1462,16 @@ static class BulletSimAPI { | |||
1462 | numSimSteps = world.StepSimulation(timeStep, m_maxSubSteps, m_fixedTimeStep); | 1462 | numSimSteps = world.StepSimulation(timeStep, m_maxSubSteps, m_fixedTimeStep); |
1463 | int updates = 0; | 1463 | int updates = 0; |
1464 | 1464 | ||
1465 | updatedEntityCount = world.UpdatedObjects.Count; | 1465 | updatedEntityCount = world.UpdatedObjects.Length; |
1466 | updatedEntities = new List<BulletXNA.EntityProperties>(world.UpdatedObjects); | 1466 | updatedEntities = (world.UpdatedObjects); |
1467 | updatedEntityCount = updatedEntities.Count; | 1467 | updatedEntityCount = updatedEntities.Length; |
1468 | world.UpdatedObjects.Clear(); | 1468 | //world.UpdatedObjects = ; |
1469 | 1469 | ||
1470 | 1470 | ||
1471 | collidersCount = world.UpdatedCollisions.Count; | 1471 | collidersCount = world.UpdatedCollisions.Length; |
1472 | colliders = new List<BulletXNA.CollisionDesc>(world.UpdatedCollisions); | 1472 | colliders = (world.UpdatedCollisions); |
1473 | 1473 | ||
1474 | world.UpdatedCollisions.Clear(); | 1474 | world.UpdatedCollisions = new BulletXNA.CollisionDesc[0]; |
1475 | m_collisionsThisFrame = 0; | 1475 | m_collisionsThisFrame = 0; |
1476 | int numManifolds = world.GetDispatcher().GetNumManifolds(); | 1476 | int numManifolds = world.GetDispatcher().GetNumManifolds(); |
1477 | for (int j = 0; j < numManifolds; j++) | 1477 | for (int j = 0; j < numManifolds; j++) |
@@ -1501,10 +1501,10 @@ static class BulletSimAPI { | |||
1501 | else | 1501 | else |
1502 | { | 1502 | { |
1503 | //if (updatedEntities is null) | 1503 | //if (updatedEntities is null) |
1504 | updatedEntities = new List<BulletXNA.EntityProperties>(); | 1504 | updatedEntities = new BulletXNA.EntityProperties[0]; |
1505 | updatedEntityCount = 0; | 1505 | updatedEntityCount = 0; |
1506 | //if (colliders is null) | 1506 | //if (colliders is null) |
1507 | colliders = new List<BulletXNA.CollisionDesc>(); | 1507 | colliders = new BulletXNA.CollisionDesc[0]; |
1508 | collidersCount = 0; | 1508 | collidersCount = 0; |
1509 | } | 1509 | } |
1510 | return numSimSteps; | 1510 | return numSimSteps; |
@@ -1538,7 +1538,8 @@ static class BulletSimAPI { | |||
1538 | point = contact, | 1538 | point = contact, |
1539 | normal = contactNormal | 1539 | normal = contactNormal |
1540 | }; | 1540 | }; |
1541 | world.UpdatedCollisions.Add(cDesc); | 1541 | if (world.LastCollisionDesc < world.UpdatedCollisions.Length) |
1542 | world.UpdatedCollisions[world.LastCollisionDesc++] = (cDesc); | ||
1542 | m_collisionsThisFrame++; | 1543 | m_collisionsThisFrame++; |
1543 | 1544 | ||
1544 | 1545 | ||