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>
|
||||
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 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);
|
||||
}
|
||||
|
||||
// get any texture UUIDs used for materials such as normal and specular maps
|
||||
GatherMaterialsUuids(part, assetUuids);
|
||||
part.ParentGroup.Scene.EventManager.TriggerGatherUuids(part, assetUuids);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -212,70 +211,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// }
|
||||
// }
|
||||
|
||||
/// <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>
|
||||
/// Get an asset synchronously, potentially using an asynchronous callback. If the
|
||||
/// asynchronous callback is used, we will wait for it to complete.
|
||||
|
|
|
@ -121,9 +121,11 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
|
|||
return;
|
||||
|
||||
m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} ADDED", scene.RegionInfo.RegionName);
|
||||
|
||||
m_scene = scene;
|
||||
m_scene.EventManager.OnRegisterCaps += new EventManager.RegisterCapsEvent(OnRegisterCaps);
|
||||
m_scene.EventManager.OnObjectAddedToScene += new Action<SceneObjectGroup>(EventManager_OnObjectAddedToScene);
|
||||
m_scene.EventManager.OnRegisterCaps += OnRegisterCaps;
|
||||
m_scene.EventManager.OnObjectAddedToScene += EventManager_OnObjectAddedToScene;
|
||||
m_scene.EventManager.OnGatherUuids += GatherMaterialsUuids;
|
||||
}
|
||||
|
||||
void EventManager_OnObjectAddedToScene(SceneObjectGroup obj)
|
||||
|
@ -157,6 +159,10 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
|
|||
if (!m_enabled)
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -569,5 +575,67 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
|
|||
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