refactor: Move code for gathering textures referenced by materials into MaterialsDemoModule from UuidGatherer
This code is now triggered via EventManager.OnGatherUuids which modules can subscribe to.cpu-performance
parent
f7d09b898a
commit
149487ea0f
|
@ -1021,6 +1021,16 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public event TeleportFail OnTeleportFail;
|
public event TeleportFail OnTeleportFail;
|
||||||
|
|
||||||
|
public delegate void GatherUuids(SceneObjectPart sop, IDictionary<UUID, AssetType> assetUuids);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Triggered when UUIDs referenced by a scene object are being gathered for archiving, hg transfer, etc.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// The listener should add references to the IDictionary<UUID, AssetType> as appropriate.
|
||||||
|
/// </remarks>
|
||||||
|
public event GatherUuids OnGatherUuids;
|
||||||
|
|
||||||
public class MoneyTransferArgs : EventArgs
|
public class MoneyTransferArgs : EventArgs
|
||||||
{
|
{
|
||||||
public UUID sender;
|
public UUID sender;
|
||||||
|
@ -3237,5 +3247,26 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void TriggerGatherUuids(SceneObjectPart sop, IDictionary<UUID, AssetType> assetUuids)
|
||||||
|
{
|
||||||
|
GatherUuids handler = OnGatherUuids;
|
||||||
|
|
||||||
|
if (handler != null)
|
||||||
|
{
|
||||||
|
foreach (GatherUuids d in handler.GetInvocationList())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
d(sop, assetUuids);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat("[EVENT MANAGER]: Delegate for TriggerUuidGather failed - continuing {0} - {1}",
|
||||||
|
e.Message, e.StackTrace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,8 +186,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
GatherAssetUuids(tii.AssetID, (AssetType)tii.Type, assetUuids);
|
GatherAssetUuids(tii.AssetID, (AssetType)tii.Type, assetUuids);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get any texture UUIDs used for materials such as normal and specular maps
|
part.ParentGroup.Scene.EventManager.TriggerGatherUuids(part, assetUuids);
|
||||||
GatherMaterialsUuids(part, assetUuids);
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -211,71 +210,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Monitor.Pulse(this);
|
// Monitor.Pulse(this);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="part"></param>
|
|
||||||
/// <param name="assetUuids"></param>
|
|
||||||
public void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids)
|
|
||||||
{
|
|
||||||
// scan thru the dynAttrs map of this part for any textures used as materials
|
|
||||||
OSD osdMaterials = null;
|
|
||||||
|
|
||||||
lock (part.DynAttrs)
|
|
||||||
{
|
|
||||||
if (part.DynAttrs.ContainsStore("OpenSim", "Materials"))
|
|
||||||
{
|
|
||||||
OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials");
|
|
||||||
materialsStore.TryGetValue("Materials", out osdMaterials);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (osdMaterials != null)
|
|
||||||
{
|
|
||||||
//m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd));
|
|
||||||
|
|
||||||
if (osdMaterials is OSDArray)
|
|
||||||
{
|
|
||||||
OSDArray matsArr = osdMaterials as OSDArray;
|
|
||||||
foreach (OSDMap matMap in matsArr)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (matMap.ContainsKey("Material"))
|
|
||||||
{
|
|
||||||
OSDMap mat = matMap["Material"] as OSDMap;
|
|
||||||
if (mat.ContainsKey("NormMap"))
|
|
||||||
{
|
|
||||||
UUID normalMapId = mat["NormMap"].AsUUID();
|
|
||||||
if (normalMapId != UUID.Zero)
|
|
||||||
{
|
|
||||||
assetUuids[normalMapId] = AssetType.Texture;
|
|
||||||
//m_log.Info("[UUID Gatherer]: found normal map ID: " + normalMapId.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (mat.ContainsKey("SpecMap"))
|
|
||||||
{
|
|
||||||
UUID specularMapId = mat["SpecMap"].AsUUID();
|
|
||||||
if (specularMapId != UUID.Zero)
|
|
||||||
{
|
|
||||||
assetUuids[specularMapId] = AssetType.Texture;
|
|
||||||
//m_log.Info("[UUID Gatherer]: found specular map ID: " + specularMapId.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.Warn("[UUID Gatherer]: exception getting materials: " + e.Message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get an asset synchronously, potentially using an asynchronous callback. If the
|
/// Get an asset synchronously, potentially using an asynchronous callback. If the
|
||||||
/// asynchronous callback is used, we will wait for it to complete.
|
/// asynchronous callback is used, we will wait for it to complete.
|
||||||
|
|
|
@ -121,9 +121,11 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} ADDED", scene.RegionInfo.RegionName);
|
m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} ADDED", scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
m_scene.EventManager.OnRegisterCaps += new EventManager.RegisterCapsEvent(OnRegisterCaps);
|
m_scene.EventManager.OnRegisterCaps += OnRegisterCaps;
|
||||||
m_scene.EventManager.OnObjectAddedToScene += new Action<SceneObjectGroup>(EventManager_OnObjectAddedToScene);
|
m_scene.EventManager.OnObjectAddedToScene += EventManager_OnObjectAddedToScene;
|
||||||
|
m_scene.EventManager.OnGatherUuids += GatherMaterialsUuids;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventManager_OnObjectAddedToScene(SceneObjectGroup obj)
|
void EventManager_OnObjectAddedToScene(SceneObjectGroup obj)
|
||||||
|
@ -157,6 +159,10 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
|
||||||
if (!m_enabled)
|
if (!m_enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
m_scene.EventManager.OnRegisterCaps -= OnRegisterCaps;
|
||||||
|
m_scene.EventManager.OnObjectAddedToScene -= EventManager_OnObjectAddedToScene;
|
||||||
|
m_scene.EventManager.OnGatherUuids -= GatherMaterialsUuids;
|
||||||
|
|
||||||
m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName);
|
m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -569,5 +575,67 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
|
||||||
output.Flush();
|
output.Flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="part"></param>
|
||||||
|
/// <param name="assetUuids"></param>
|
||||||
|
private void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids)
|
||||||
|
{
|
||||||
|
// scan thru the dynAttrs map of this part for any textures used as materials
|
||||||
|
OSD osdMaterials = null;
|
||||||
|
|
||||||
|
lock (part.DynAttrs)
|
||||||
|
{
|
||||||
|
if (part.DynAttrs.ContainsStore("OpenSim", "Materials"))
|
||||||
|
{
|
||||||
|
OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials");
|
||||||
|
materialsStore.TryGetValue("Materials", out osdMaterials);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (osdMaterials != null)
|
||||||
|
{
|
||||||
|
//m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd));
|
||||||
|
|
||||||
|
if (osdMaterials is OSDArray)
|
||||||
|
{
|
||||||
|
OSDArray matsArr = osdMaterials as OSDArray;
|
||||||
|
foreach (OSDMap matMap in matsArr)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (matMap.ContainsKey("Material"))
|
||||||
|
{
|
||||||
|
OSDMap mat = matMap["Material"] as OSDMap;
|
||||||
|
if (mat.ContainsKey("NormMap"))
|
||||||
|
{
|
||||||
|
UUID normalMapId = mat["NormMap"].AsUUID();
|
||||||
|
if (normalMapId != UUID.Zero)
|
||||||
|
{
|
||||||
|
assetUuids[normalMapId] = AssetType.Texture;
|
||||||
|
//m_log.Info("[UUID Gatherer]: found normal map ID: " + normalMapId.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mat.ContainsKey("SpecMap"))
|
||||||
|
{
|
||||||
|
UUID specularMapId = mat["SpecMap"].AsUUID();
|
||||||
|
if (specularMapId != UUID.Zero)
|
||||||
|
{
|
||||||
|
assetUuids[specularMapId] = AssetType.Texture;
|
||||||
|
//m_log.Info("[UUID Gatherer]: found specular map ID: " + specularMapId.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.Warn("[MaterialsDemoModule]: exception getting materials: " + e.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue