Commit Graph

625 Commits

Author SHA1 Message Date
Justin Clark-Casey (justincc)
7a574be3fd Remove redundant prim_geom != IntPtr.Zero checks in ODEPrim.
prim_geom == IntPtr.Zero only before a new add prim taint is processed (which is the first taint) or in operations such as scale change which are done in taint or under lock.
Therefore, we can remove these checks which were not consistently applied anyway.
If there is a genuine problem, better to see it quickly in a NullReferenceException than hide the bug.
2012-04-21 00:12:07 +01:00
Justin Clark-Casey (justincc)
566327a948 If a physical prim is manually moved (e.g. by a user) then set the geometry position as well as the body position
This is necessary to stop the moved prim snapping back to the original position on deselection if moved only once
This resolves http://opensimulator.org/mantis/view.php?id=5966
2012-04-20 23:24:24 +01:00
Justin Clark-Casey (justincc)
86bd287b53 refactor: precalculate the fixed movement factor for avatar tilting (sqrt(2)) rather than doing it multiple times on every move. 2012-03-20 20:39:33 +00:00
Justin Clark-Casey (justincc)
5f2a65c976 refactor: Eliminate unnecessary duplicate avCapsuleTilted 2012-03-20 20:28:58 +00:00
Justin Clark-Casey (justincc)
1c0f3a1f21 Fix crash where two scene loop threads could changes m_MeshToTriMeshMap at the same time.
Have to lock m_MeshToTriMeshMap as property is static and with more than one region two scene loops could try to manipulate at the same time.
2012-03-20 00:40:03 +00:00
Justin Clark-Casey (justincc)
f67f37074f Stop spurious scene loop startup timeout alarms for scenes with many prims.
On the first frame, all startup scene objects are added to the physics scene.
This can cause a considerable delay, so we don't start raising the alarm on scene loop timeouts until the second frame.
This commit also slightly changes the behaviour of timeout reporting.
Previously, a report was made for the very first timed out thread, ignoring all others until the next watchdog check.
Instead, we now report every timed out thread, though we still only do this once no matter how long the timeout.
2012-02-24 05:02:33 +00:00
Justin Clark-Casey (justincc)
68a4ef5ef6 Add 64 bit Windows sqlite3.dll and use this if running a 64-bit windows process. 2012-02-21 02:52:20 +00:00
Justin Clark-Casey (justincc)
9846a1e56e Report an error if the required native Windows ODE library can't be found. 2012-02-18 02:52:29 +00:00
Justin Clark-Casey (justincc)
b817c337dc On Windows automatically load the correct native ODE library depending on whether the process is 32-bit or 64-bit
In theory, this means that a 64-bit Windows OS user can now run OpenSim.exe with ODE and use more than 2 (or 3) GB of memory.
However, this is completely untested since I don't currently own a 64-bit Windows box.  Feedback appreciated.
Using OpenSim.32BitLaunch.exe should continue to work.  Other platforms are unaffected.
This will currently not work with sqlite - I will add that too if this works.
2012-02-18 00:33:52 +00:00
Justin Clark-Casey (justincc)
b92b9228ef correct the default avatar_terminal_velocity value that I accidentally left in whilst testing 2012-02-11 02:29:07 +00:00
Justin Clark-Casey (justincc)
f49897a419 Clamp ODE character velocity. Make ODE falling character 54m/s by default.
If velocity reaches 256 in any vector then bad things happen with ODE, so we now clamp this value.
In addition, a falling avatar is clamped by default at 54 m/s, which is the same as a falling skydiver.
This also appears to be the value used on the linden lab grid.
This should resolve http://opensimulator.org/mantis/view.php?id=5882
2012-02-11 02:28:40 +00:00
Justin Clark-Casey (justincc)
e20cf3789b Serialize calls to ODE Collide() function across OdeScene instances to prevent ODE crashes on simulators running more than one region.
It turns out that calls to Collide() are not thread-safe even for objects in different ODE physics worlds due to ODE static caches.
For simulators running multiple regions, not serializing calls from different scene loops will sooner or later cause OpenSim to crash with a native stack trace referencing OBBCollider.
This affects the default OPCODE collider but not GIMPACT.  However, GIMPACT fails for other reasons under some current simulator loads.
ODE provides a thread local storage option, but as of ODE r1755 (and r1840) DLLs compiled with this crash OpenSim immediately.
2012-01-25 19:31:50 +00:00
Justin Clark-Casey (justincc)
8b035dc3c7 Restrict accessible of ODECharacter Shell and Body. Add method doc and some error log lines. 2012-01-24 18:46:24 +00:00
Justin Clark-Casey (justincc)
014a86c26b Adding commented out log messages and some minor formatting for future bug hunting. No functional changes. 2012-01-02 19:46:30 +00:00
Justin Clark-Casey (justincc)
790ca65c84 Align default ODE_STEPSIZE with that already used through OpenSimDefaults.ini 2011-12-22 20:22:15 +00:00
Dan Lake
41b02a7208 Remove unused SetAcceleration and add set on Acceleration parameter 2011-12-20 14:45:32 -08:00
Diva Canto
dd69c9fd20 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2011-12-20 09:53:05 -08:00
Diva Canto
25cbba9bca Fixed bug of avie going under the terrain when crossing regions in certain directions. This was a 1-off bug: the terrain was being placed in 127, 127 resulting in a bounding box if -2, 256. I placed it in 128, 128 resulting in a bounding box of -1, 257. 2011-12-20 09:43:39 -08:00
Justin Clark-Casey (justincc)
5d79f857b0 Comment out accidentally left in "Adding physics prim" log message 2011-12-16 20:54:28 +00:00
Justin Clark-Casey (justincc)
8013c0d2f5 Stop pointlessly setting the m_colliderarr[] to false in the ODECharacter constructor 2011-12-15 22:33:14 +00:00
Justin Clark-Casey (justincc)
c0ba99e5ad Stop having to call SetHeight again in ScenePresence.AddToPhysicalScene() when we've already passed size information to the avatar at PhysicsScene.AddAvatar()
Eliminate some copypasta for height setting in OdeCharacter
2011-12-15 22:29:36 +00:00
Justin Clark-Casey (justincc)
937c06db54 Code cleanup related to ScenePresence.PhysicsActor and OdeScene/OdeCharacter
Stop hiding RemoveAvatar failure, add log messages when characters are removed through defects or re-added unexpectedly.
Add commented out log lines for future use.
Use automatic property for PhysicsActor for better code readability and simplicity
2011-12-15 21:57:22 +00:00
Justin Clark-Casey (justincc)
6f2d80cc93 minor: add some currently commented log lines for use in debugging 2011-12-14 21:27:47 +00:00
Justin Clark-Casey (justincc)
e830a77860 Simplify some manipulation of _taintedActors in OdeScene 2011-12-14 18:33:44 +00:00
Justin Clark-Casey (justincc)
a110a7bd6a Eliminate _taintedPrimsH and _taintedPrimsL (and _taintedPrimLock) in favour of just a _taintedPrims HashSet.
There's no point maintaining a list because any pending taint operations are all carried out in the same call anyway.
2011-12-14 18:03:25 +00:00
Justin Clark-Casey (justincc)
4dfd2c7d47 minor: remove pointless comment from OdeScene.cs 2011-12-12 19:31:50 +00:00
Justin Clark-Casey (justincc)
b785f204ce remove some mono compiler warnings 2011-11-25 22:19:57 +00:00
Justin Clark-Casey (justincc)
b56410285b Log error if we attempt to add/remove an OdeCharacter from the _characters list inappropriately 2011-11-22 22:46:25 +00:00
Justin Clark-Casey (justincc)
ace4324e75 Stop removing actor from the hash maps in OdeScene.RemoveCharacter() since this is now being down in OdeCharacter.DestroyOdeStructures() 2011-11-22 22:37:06 +00:00
Justin Clark-Casey (justincc)
af90b52731 Comment out uncalled OdeScene.UnCombine() 2011-11-22 22:28:46 +00:00
Justin Clark-Casey (justincc)
daf99f8c0a slightly simplify OdeScene.Simulate() by removing bool processtaints, since we can inspect count of taint lists instead.
also groups OdeCharacter.CreateOdeStructures() and DestroyOdeStructures() together
2011-11-22 21:51:00 +00:00
Justin Clark-Casey (justincc)
c4e4a29478 Slightly improve "Unable to space collide" logging message, though I don't think I've ever seen this. 2011-11-21 21:31:26 +00:00
Justin Clark-Casey (justincc)
4ddff7eb0f Get rid of OdeCharacter != null checks since OdeScene._characters can never contain a null character.
Ignoring the ancient code glyphs not to do this....
2011-11-21 21:29:56 +00:00
Justin Clark-Casey (justincc)
82dc7886fc remove unnecessary OdeScene._activeprims locking. Code is single-threaded 2011-11-21 21:15:15 +00:00
Justin Clark-Casey (justincc)
7480f2fd0e Restore defects list. In hindsight, the reason for this is becuase we can't remove the character whilst iterating over the list.
This commit also removes locking on OdeScene._characters since code is single threaded
2011-11-21 21:04:24 +00:00
Justin Clark-Casey (justincc)
546259b2ff simplify operation of OdeScene._perloopContact 2011-11-21 20:30:37 +00:00
Justin Clark-Casey (justincc)
25d9001de1 don't bother locking OdeScene._perloopContact in single threaded code 2011-11-21 20:17:36 +00:00
Justin Clark-Casey (justincc)
e33b0fa35b don't lock OdeScene.contacts since only ever accessed by a single thread 2011-11-21 20:12:04 +00:00
Justin Clark-Casey (justincc)
e67ba0ad06 rename ODECharacter.AvatarGeomAndBodyCreation() -> CreateOdeStructures() to match existing DestroyOdeStructures() 2011-11-21 20:01:34 +00:00
Justin Clark-Casey (justincc)
063f0f5d97 refactor: Eliminate one line ODECharacter.doForce() method for code clarity 2011-11-21 19:58:37 +00:00
Justin Clark-Casey (justincc)
225b925f4e Comment out calls to OdeScene.waitForSpaceUnlock() since that method does nothing right now 2011-11-21 19:48:31 +00:00
Justin Clark-Casey (justincc)
54789706f4 Reduce complexity of OdeScene.Simulate() by fully removing bad characters at point of detection rather than later on. 2011-11-21 19:45:22 +00:00
Justin Clark-Casey (justincc)
3becda919e move geom/actor map maintenance into DestroyODEStructures()/AvatarGeomAndBodyCreation().
This saves us having to do it separately when a character capsule size is changed
2011-11-21 19:31:29 +00:00
Justin Clark-Casey (justincc)
4faac1f090 When changing avatar size in ODE, remove the old actor from the name and actor maps 2011-11-21 19:06:53 +00:00
Justin Clark-Casey (justincc)
898904d83d When an ODECharacter is removed (e.g. when an avatar leaves a scene), remove the actor reference in OdeScene.actor_name_map rather than leaving it dangling.
This also largely centralizes adds/removes in OdeScene.AddCharacter()/RemoveCharacter()
2011-11-21 18:27:41 +00:00
Justin Clark-Casey (justincc)
cead87005b Have ODECharacter and ODEPrim both use PhysicsActor.Name instead of maintaining their own properties 2011-11-21 18:06:04 +00:00
Justin Clark-Casey (justincc)
4485007fce Instead of generating a new list for bad characters on every physics pass, keep reusing the same list. 2011-11-21 17:04:54 +00:00
Justin Clark-Casey (justincc)
b6d83e9c0f Stop OdePrim and OdeCharacter insanely overriding set LocalID to set their own private m_localID property but leaving get to return the then unset PhysicsActor.LocalId!
Instead, just have both subclasses use the PhysicsActor.LocalID property.
This restores collision functionality that fell away in 45c7789 yesterday
2011-11-16 23:01:59 +00:00
Justin Clark-Casey (justincc)
e16d7fe1da Instead of having scene add/remove collision events directly to the OdeScene collision event dictionary, marshall them via a change dictionary first.
This is to avoid a complicated tri-thread deadlock on region crossing for avatars with attachments, where
1) XEngine starting up scripts can lock XEngine.m_Scripts and then try to lock OdeScene._collisionEventPrim while starting up a script due to avatar border crossing
2) An existing collision event will lock OdeScene._collisionEventPrim and then try to lock SP.m_attachments while trying to send the collision event to attachments
3) The avatar still entering the region will lock SP.m_attachments and then try to lock m_Scripts to start more attachment scripts.
2011-11-15 20:02:09 +00:00
Justin Clark-Casey (justincc)
45c7789b54 use a more efficient dictionary in OdeScene._collisionEventPrim rather than a list 2011-11-15 19:42:33 +00:00