and now.. seems to work.. but does it really work?
parent
6dc4c8321d
commit
254008cd1f
|
@ -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()
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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">
|
||||||
|
|
Loading…
Reference in New Issue