and now.. seems to work.. but does it really work?

avinationmerge
UbitUmarov 2015-09-08 21:41:52 +01:00
parent 6dc4c8321d
commit 254008cd1f
3 changed files with 68 additions and 54 deletions

View File

@ -95,29 +95,33 @@ namespace OpenSim.Region.PhysicsModule.UbitMeshing
IConfig start_config = config.Configs["Startup"]; IConfig start_config = config.Configs["Startup"];
IConfig mesh_config = config.Configs["Mesh"]; IConfig mesh_config = config.Configs["Mesh"];
string mesher = start_config.GetString("meshing", string.Empty);
float fcache = 48.0f; if (mesher == Name)
// float fcache = 0.02f;
if(mesh_config != null)
{ {
useMeshiesPhysicsMesh = mesh_config.GetBoolean("UseMeshiesPhysicsMesh", useMeshiesPhysicsMesh);
if (useMeshiesPhysicsMesh) float fcache = 48.0f;
// float fcache = 0.02f;
if (mesh_config != null)
{ {
doMeshFileCache = mesh_config.GetBoolean("MeshFileCache", doMeshFileCache); useMeshiesPhysicsMesh = mesh_config.GetBoolean("UseMeshiesPhysicsMesh", useMeshiesPhysicsMesh);
cachePath = mesh_config.GetString("MeshFileCachePath", cachePath); if (useMeshiesPhysicsMesh)
fcache = mesh_config.GetFloat("MeshFileCacheExpireHours", fcache); {
doCacheExpire = mesh_config.GetBoolean("MeshFileCacheDoExpire", doCacheExpire); doMeshFileCache = mesh_config.GetBoolean("MeshFileCache", doMeshFileCache);
} cachePath = mesh_config.GetString("MeshFileCachePath", cachePath);
else fcache = mesh_config.GetFloat("MeshFileCacheExpireHours", fcache);
{ doCacheExpire = mesh_config.GetBoolean("MeshFileCacheDoExpire", doCacheExpire);
doMeshFileCache = false; }
doCacheExpire = false; else
{
doMeshFileCache = false;
doCacheExpire = false;
}
m_Enabled = true;
} }
CacheExpire = TimeSpan.FromHours(fcache);
} }
CacheExpire = TimeSpan.FromHours(fcache);
} }
public void Close() public void Close()
{ {

View File

@ -408,8 +408,13 @@ namespace OpenSim.Region.PhysicsModule.UbitOde
mesher = scene.RequestModuleInterface<IMesher>(); mesher = scene.RequestModuleInterface<IMesher>();
if (mesher == null) if (mesher == null)
m_log.WarnFormat("{0} No mesher. Things will not work well.", LogHeader); {
m_log.WarnFormat("{0} No mesher. module disabled", LogHeader);
m_Enabled = false;
return;
}
region_loaded();
scene.PhysicsEnabled = true; scene.PhysicsEnabled = true;
} }
#endregion #endregion
@ -420,9 +425,9 @@ namespace OpenSim.Region.PhysicsModule.UbitOde
/// These settings need to be tweaked 'exactly' right or weird stuff happens. /// These settings need to be tweaked 'exactly' right or weird stuff happens.
/// </summary> /// </summary>
private void Initialization(Vector3 regionExtent) private void Initialization(Vector3 regionExtent)
{ {
// checkThread(); // checkThread();
OdeLock = new Object(); OdeLock = new Object();
SimulationLock = new Object(); SimulationLock = new Object();
@ -432,10 +437,10 @@ namespace OpenSim.Region.PhysicsModule.UbitOde
m_rayCastManager = new ODERayCastRequestManager(this); m_rayCastManager = new ODERayCastRequestManager(this);
lock (OdeLock) lock (OdeLock)
{ {
// Create the world and the first space // Create the world and the first space
try try
{ {
world = d.WorldCreate(); world = d.WorldCreate();
TopSpace = d.HashSpaceCreate(IntPtr.Zero); TopSpace = d.HashSpaceCreate(IntPtr.Zero);
@ -444,12 +449,12 @@ namespace OpenSim.Region.PhysicsModule.UbitOde
CharsSpace = d.HashSpaceCreate(TopSpace); CharsSpace = d.HashSpaceCreate(TopSpace);
StaticSpace = d.HashSpaceCreate(TopSpace); StaticSpace = d.HashSpaceCreate(TopSpace);
GroundSpace = d.HashSpaceCreate(TopSpace); GroundSpace = d.HashSpaceCreate(TopSpace);
} }
catch catch
{ {
// i must RtC#FM // i must RtC#FM
// i did! // i did!
} }
d.HashSpaceSetLevels(TopSpace, -2, 8); d.HashSpaceSetLevels(TopSpace, -2, 8);
d.HashSpaceSetLevels(ActiveSpace, -2, 8); d.HashSpaceSetLevels(ActiveSpace, -2, 8);
@ -485,8 +490,8 @@ namespace OpenSim.Region.PhysicsModule.UbitOde
d.GeomSetCategoryBits(StaticSpace, (uint)(CollisionCategories.Space | d.GeomSetCategoryBits(StaticSpace, (uint)(CollisionCategories.Space |
CollisionCategories.Geom | CollisionCategories.Geom |
// CollisionCategories.Land | // CollisionCategories.Land |
// CollisionCategories.Water | // CollisionCategories.Water |
CollisionCategories.Phantom | CollisionCategories.Phantom |
CollisionCategories.VolumeDtc CollisionCategories.VolumeDtc
)); ));
@ -501,14 +506,17 @@ namespace OpenSim.Region.PhysicsModule.UbitOde
d.WorldSetAutoDisableFlag(world, false); d.WorldSetAutoDisableFlag(world, false);
} }
WorldExtents.X = regionExtent.X; WorldExtents.X = regionExtent.X;
m_regionWidth = (uint)regionExtent.X; m_regionWidth = (uint)regionExtent.X;
WorldExtents.Y = regionExtent.Y; WorldExtents.Y = regionExtent.Y;
m_regionHeight = (uint)regionExtent.Y; m_regionHeight = (uint)regionExtent.Y;
m_suportCombine = false; m_suportCombine = false;
// checkThread(); // checkThread();
}
private void region_loaded()
{
string ode_config = d.GetConfiguration(); string ode_config = d.GetConfiguration();
if (ode_config != null && ode_config != "") if (ode_config != null && ode_config != "")
{ {
@ -537,7 +545,7 @@ namespace OpenSim.Region.PhysicsModule.UbitOde
metersInSpace = physicsconfig.GetFloat("meters_in_small_space", metersInSpace); metersInSpace = physicsconfig.GetFloat("meters_in_small_space", metersInSpace);
// contactsurfacelayer = physicsconfig.GetFloat("world_contact_surface_layer", contactsurfacelayer); // contactsurfacelayer = physicsconfig.GetFloat("world_contact_surface_layer", contactsurfacelayer);
ODE_STEPSIZE = physicsconfig.GetFloat("world_stepsize", ODE_STEPSIZE); ODE_STEPSIZE = physicsconfig.GetFloat("world_stepsize", ODE_STEPSIZE);
@ -579,7 +587,7 @@ namespace OpenSim.Region.PhysicsModule.UbitOde
m_meshWorker = new ODEMeshWorker(this, m_log, mesher, physicsconfig); m_meshWorker = new ODEMeshWorker(this, m_log, mesher, physicsconfig);
HalfOdeStep = ODE_STEPSIZE * 0.5f; HalfOdeStep = ODE_STEPSIZE * 0.5f;
odetimestepMS = (int)(1000.0f * ODE_STEPSIZE +0.5f); odetimestepMS = (int)(1000.0f * ODE_STEPSIZE + 0.5f);
ContactgeomsArray = Marshal.AllocHGlobal(contactsPerCollision * d.ContactGeom.unmanagedSizeOf); ContactgeomsArray = Marshal.AllocHGlobal(contactsPerCollision * d.ContactGeom.unmanagedSizeOf);
GlobalContactsArray = Marshal.AllocHGlobal(maxContactsbeforedeath * d.Contact.unmanagedSizeOf); GlobalContactsArray = Marshal.AllocHGlobal(maxContactsbeforedeath * d.Contact.unmanagedSizeOf);
@ -631,13 +639,13 @@ namespace OpenSim.Region.PhysicsModule.UbitOde
if (spaceGridMaxX > 24) if (spaceGridMaxX > 24)
{ {
spaceGridMaxX = 24; spaceGridMaxX = 24;
spacesPerMeterX = spaceGridMaxX / WorldExtents.X ; spacesPerMeterX = spaceGridMaxX / WorldExtents.X;
} }
if (spaceGridMaxY > 24) if (spaceGridMaxY > 24)
{ {
spaceGridMaxY = 24; spaceGridMaxY = 24;
spacesPerMeterY = spaceGridMaxY / WorldExtents.Y ; spacesPerMeterY = spaceGridMaxY / WorldExtents.Y;
} }
staticPrimspace = new IntPtr[spaceGridMaxX, spaceGridMaxY]; staticPrimspace = new IntPtr[spaceGridMaxX, spaceGridMaxY];
@ -674,23 +682,23 @@ namespace OpenSim.Region.PhysicsModule.UbitOde
staticPrimspaceOffRegion = new IntPtr[4]; staticPrimspaceOffRegion = new IntPtr[4];
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
newspace = d.HashSpaceCreate(StaticSpace); newspace = d.HashSpaceCreate(StaticSpace);
d.GeomSetCategoryBits(newspace, (int)CollisionCategories.Space); d.GeomSetCategoryBits(newspace, (int)CollisionCategories.Space);
waitForSpaceUnlock(newspace); waitForSpaceUnlock(newspace);
d.SpaceSetSublevel(newspace, 2); d.SpaceSetSublevel(newspace, 2);
d.HashSpaceSetLevels(newspace, -2, 8); d.HashSpaceSetLevels(newspace, -2, 8);
d.GeomSetCategoryBits(newspace, (uint)(CollisionCategories.Space | d.GeomSetCategoryBits(newspace, (uint)(CollisionCategories.Space |
CollisionCategories.Geom | CollisionCategories.Geom |
CollisionCategories.Land | CollisionCategories.Land |
CollisionCategories.Water | CollisionCategories.Water |
CollisionCategories.Phantom | CollisionCategories.Phantom |
CollisionCategories.VolumeDtc CollisionCategories.VolumeDtc
)); ));
d.GeomSetCollideBits(newspace, 0); d.GeomSetCollideBits(newspace, 0);
staticPrimspaceOffRegion[i] = newspace; staticPrimspaceOffRegion[i] = newspace;
} }
m_lastframe = DateTime.UtcNow; m_lastframe = DateTime.UtcNow;
m_lastMeshExpire = m_lastframe; m_lastMeshExpire = m_lastframe;

View File

@ -1609,6 +1609,8 @@
<Reference name="System.Core"/> <Reference name="System.Core"/>
<Reference name="System.Data"/> <Reference name="System.Data"/>
<Reference name="System.Xml"/> <Reference name="System.Xml"/>
<Reference name="OpenSim.Framework"/>
<Reference name="Mono.Addins" path="../../../../bin/"/>
<Files> <Files>
<Match pattern="*.cs" recurse="true"> <Match pattern="*.cs" recurse="true">