aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2013-06-28 18:50:33 +0100
committerJustin Clark-Casey (justincc)2013-06-28 18:50:33 +0100
commitf6ce87c96d037787963d203346c5cb1a1dd52747 (patch)
tree0c783b973dd9bc929a81fa67fadc871a5bbc5134
parentadd method docs for DAMap.GetStore() and DAMap.SetStore() (diff)
downloadopensim-SC_OLD-f6ce87c96d037787963d203346c5cb1a1dd52747.zip
opensim-SC_OLD-f6ce87c96d037787963d203346c5cb1a1dd52747.tar.gz
opensim-SC_OLD-f6ce87c96d037787963d203346c5cb1a1dd52747.tar.bz2
opensim-SC_OLD-f6ce87c96d037787963d203346c5cb1a1dd52747.tar.xz
Reinsert code for gathering uuids reference by materials back directly into UuidGatherer for now.
This cannot be triggered as an event from Scene.EventManager since some invocations of UuidGatherer (e.g. IAR saving) use scene objects which are not in scenes. There needs to be some way for modules to register for events which are not connected with a particular scene.
-rw-r--r--OpenSim/Region/Framework/Scenes/EventManager.cs58
-rw-r--r--OpenSim/Region/Framework/Scenes/UuidGatherer.cs71
-rw-r--r--OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs136
3 files changed, 168 insertions, 97 deletions
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 720bfa9..61b0ebd 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -1021,15 +1021,15 @@ namespace OpenSim.Region.Framework.Scenes
1021 /// </remarks> 1021 /// </remarks>
1022 public event TeleportFail OnTeleportFail; 1022 public event TeleportFail OnTeleportFail;
1023 1023
1024 public delegate void GatherUuids(SceneObjectPart sop, IDictionary<UUID, AssetType> assetUuids); 1024// public delegate void GatherUuids(SceneObjectPart sop, IDictionary<UUID, AssetType> assetUuids);
1025 1025//
1026 /// <summary> 1026// /// <summary>
1027 /// Triggered when UUIDs referenced by a scene object are being gathered for archiving, hg transfer, etc. 1027// /// Triggered when UUIDs referenced by a scene object are being gathered for archiving, hg transfer, etc.
1028 /// </summary> 1028// /// </summary>
1029 /// <remarks> 1029// /// <remarks>
1030 /// The listener should add references to the IDictionary<UUID, AssetType> as appropriate. 1030// /// The listener should add references to the IDictionary<UUID, AssetType> as appropriate.
1031 /// </remarks> 1031// /// </remarks>
1032 public event GatherUuids OnGatherUuids; 1032// public event GatherUuids OnGatherUuids;
1033 1033
1034 public class MoneyTransferArgs : EventArgs 1034 public class MoneyTransferArgs : EventArgs
1035 { 1035 {
@@ -3248,25 +3248,25 @@ namespace OpenSim.Region.Framework.Scenes
3248 } 3248 }
3249 } 3249 }
3250 3250
3251 public void TriggerGatherUuids(SceneObjectPart sop, IDictionary<UUID, AssetType> assetUuids) 3251// public void TriggerGatherUuids(SceneObjectPart sop, IDictionary<UUID, AssetType> assetUuids)
3252 { 3252// {
3253 GatherUuids handler = OnGatherUuids; 3253// GatherUuids handler = OnGatherUuids;
3254 3254//
3255 if (handler != null) 3255// if (handler != null)
3256 { 3256// {
3257 foreach (GatherUuids d in handler.GetInvocationList()) 3257// foreach (GatherUuids d in handler.GetInvocationList())
3258 { 3258// {
3259 try 3259// try
3260 { 3260// {
3261 d(sop, assetUuids); 3261// d(sop, assetUuids);
3262 } 3262// }
3263 catch (Exception e) 3263// catch (Exception e)
3264 { 3264// {
3265 m_log.ErrorFormat("[EVENT MANAGER]: Delegate for TriggerUuidGather failed - continuing {0} - {1}", 3265// m_log.ErrorFormat("[EVENT MANAGER]: Delegate for TriggerUuidGather failed - continuing {0} - {1}",
3266 e.Message, e.StackTrace); 3266// e.Message, e.StackTrace);
3267 } 3267// }
3268 } 3268// }
3269 } 3269// }
3270 } 3270// }
3271 } 3271 }
3272} 3272}
diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
index 3492813..4e5fb8e 100644
--- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
+++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
@@ -186,7 +186,13 @@ namespace OpenSim.Region.Framework.Scenes
186 GatherAssetUuids(tii.AssetID, (AssetType)tii.Type, assetUuids); 186 GatherAssetUuids(tii.AssetID, (AssetType)tii.Type, assetUuids);
187 } 187 }
188 188
189 part.ParentGroup.Scene.EventManager.TriggerGatherUuids(part, assetUuids); 189 // FIXME: We need to make gathering modular but we cannot yet, since gatherers are not guaranteed
190 // to be called with scene objects that are in a scene (e.g. in the case of hg asset mapping and
191 // inventory transfer. There needs to be a way for a module to register a method without assuming a
192 // Scene.EventManager is present.
193// part.ParentGroup.Scene.EventManager.TriggerGatherUuids(part, assetUuids);
194
195 GatherMaterialsUuids(part, assetUuids);
190 } 196 }
191 catch (Exception e) 197 catch (Exception e)
192 { 198 {
@@ -210,6 +216,69 @@ namespace OpenSim.Region.Framework.Scenes
210// Monitor.Pulse(this); 216// Monitor.Pulse(this);
211// } 217// }
212// } 218// }
219
220 /// <summary>
221 /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps
222 /// </summary>
223 /// <param name="part"></param>
224 /// <param name="assetUuids"></param>
225 public void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids)
226 {
227 // scan thru the dynAttrs map of this part for any textures used as materials
228 OSD osdMaterials = null;
229
230 lock (part.DynAttrs)
231 {
232 if (part.DynAttrs.ContainsStore("OpenSim", "Materials"))
233 {
234 OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials");
235 materialsStore.TryGetValue("Materials", out osdMaterials);
236 }
237
238 if (osdMaterials != null)
239 {
240 //m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd));
241
242 if (osdMaterials is OSDArray)
243 {
244 OSDArray matsArr = osdMaterials as OSDArray;
245 foreach (OSDMap matMap in matsArr)
246 {
247 try
248 {
249 if (matMap.ContainsKey("Material"))
250 {
251 OSDMap mat = matMap["Material"] as OSDMap;
252 if (mat.ContainsKey("NormMap"))
253 {
254 UUID normalMapId = mat["NormMap"].AsUUID();
255 if (normalMapId != UUID.Zero)
256 {
257 assetUuids[normalMapId] = AssetType.Texture;
258 //m_log.Info("[UUID Gatherer]: found normal map ID: " + normalMapId.ToString());
259 }
260 }
261 if (mat.ContainsKey("SpecMap"))
262 {
263 UUID specularMapId = mat["SpecMap"].AsUUID();
264 if (specularMapId != UUID.Zero)
265 {
266 assetUuids[specularMapId] = AssetType.Texture;
267 //m_log.Info("[UUID Gatherer]: found specular map ID: " + specularMapId.ToString());
268 }
269 }
270 }
271
272 }
273 catch (Exception e)
274 {
275 m_log.Warn("[UUID Gatherer]: exception getting materials: " + e.Message);
276 }
277 }
278 }
279 }
280 }
281 }
213 282
214 /// <summary> 283 /// <summary>
215 /// Get an asset synchronously, potentially using an asynchronous callback. If the 284 /// Get an asset synchronously, potentially using an asynchronous callback. If the
diff --git a/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs b/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs
index 34dc552..1cfbab0 100644
--- a/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs
+++ b/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs
@@ -125,7 +125,7 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
125 m_scene = scene; 125 m_scene = scene;
126 m_scene.EventManager.OnRegisterCaps += OnRegisterCaps; 126 m_scene.EventManager.OnRegisterCaps += OnRegisterCaps;
127 m_scene.EventManager.OnObjectAddedToScene += EventManager_OnObjectAddedToScene; 127 m_scene.EventManager.OnObjectAddedToScene += EventManager_OnObjectAddedToScene;
128 m_scene.EventManager.OnGatherUuids += GatherMaterialsUuids; 128// m_scene.EventManager.OnGatherUuids += GatherMaterialsUuids;
129 } 129 }
130 130
131 void EventManager_OnObjectAddedToScene(SceneObjectGroup obj) 131 void EventManager_OnObjectAddedToScene(SceneObjectGroup obj)
@@ -161,7 +161,7 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
161 161
162 m_scene.EventManager.OnRegisterCaps -= OnRegisterCaps; 162 m_scene.EventManager.OnRegisterCaps -= OnRegisterCaps;
163 m_scene.EventManager.OnObjectAddedToScene -= EventManager_OnObjectAddedToScene; 163 m_scene.EventManager.OnObjectAddedToScene -= EventManager_OnObjectAddedToScene;
164 m_scene.EventManager.OnGatherUuids -= GatherMaterialsUuids; 164// m_scene.EventManager.OnGatherUuids -= GatherMaterialsUuids;
165 165
166 m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName); 166 m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName);
167 } 167 }
@@ -579,70 +579,72 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
579 output.Flush(); 579 output.Flush();
580 } 580 }
581 581
582 /// <summary> 582 // FIXME: This code is currently still in UuidGatherer since we cannot use Scene.EventManager as some
583 /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps 583 // calls to the gatherer are done for objects with no scene.
584 /// </summary> 584// /// <summary>
585 /// <param name="part"></param> 585// /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps
586 /// <param name="assetUuids"></param> 586// /// </summary>
587 private void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids) 587// /// <param name="part"></param>
588 { 588// /// <param name="assetUuids"></param>
589 // scan thru the dynAttrs map of this part for any textures used as materials 589// private void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids)
590 OSD osdMaterials = null; 590// {
591 591// // scan thru the dynAttrs map of this part for any textures used as materials
592 lock (part.DynAttrs) 592// OSD osdMaterials = null;
593 { 593//
594 if (part.DynAttrs.ContainsStore("OpenSim", "Materials")) 594// lock (part.DynAttrs)
595 { 595// {
596 OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials"); 596// if (part.DynAttrs.ContainsStore("OpenSim", "Materials"))
597 if (materialsStore == null) 597// {
598 return; 598// OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials");
599 599// if (materialsStore == null)
600 materialsStore.TryGetValue("Materials", out osdMaterials); 600// return;
601 } 601//
602 602// materialsStore.TryGetValue("Materials", out osdMaterials);
603 if (osdMaterials != null) 603// }
604 { 604//
605 //m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd)); 605// if (osdMaterials != null)
606 606// {
607 if (osdMaterials is OSDArray) 607// //m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd));
608 { 608//
609 OSDArray matsArr = osdMaterials as OSDArray; 609// if (osdMaterials is OSDArray)
610 foreach (OSDMap matMap in matsArr) 610// {
611 { 611// OSDArray matsArr = osdMaterials as OSDArray;
612 try 612// foreach (OSDMap matMap in matsArr)
613 { 613// {
614 if (matMap.ContainsKey("Material")) 614// try
615 { 615// {
616 OSDMap mat = matMap["Material"] as OSDMap; 616// if (matMap.ContainsKey("Material"))
617 if (mat.ContainsKey("NormMap")) 617// {
618 { 618// OSDMap mat = matMap["Material"] as OSDMap;
619 UUID normalMapId = mat["NormMap"].AsUUID(); 619// if (mat.ContainsKey("NormMap"))
620 if (normalMapId != UUID.Zero) 620// {
621 { 621// UUID normalMapId = mat["NormMap"].AsUUID();
622 assetUuids[normalMapId] = AssetType.Texture; 622// if (normalMapId != UUID.Zero)
623 //m_log.Info("[UUID Gatherer]: found normal map ID: " + normalMapId.ToString()); 623// {
624 } 624// assetUuids[normalMapId] = AssetType.Texture;
625 } 625// //m_log.Info("[UUID Gatherer]: found normal map ID: " + normalMapId.ToString());
626 if (mat.ContainsKey("SpecMap")) 626// }
627 { 627// }
628 UUID specularMapId = mat["SpecMap"].AsUUID(); 628// if (mat.ContainsKey("SpecMap"))
629 if (specularMapId != UUID.Zero) 629// {
630 { 630// UUID specularMapId = mat["SpecMap"].AsUUID();
631 assetUuids[specularMapId] = AssetType.Texture; 631// if (specularMapId != UUID.Zero)
632 //m_log.Info("[UUID Gatherer]: found specular map ID: " + specularMapId.ToString()); 632// {
633 } 633// assetUuids[specularMapId] = AssetType.Texture;
634 } 634// //m_log.Info("[UUID Gatherer]: found specular map ID: " + specularMapId.ToString());
635 } 635// }
636 636// }
637 } 637// }
638 catch (Exception e) 638//
639 { 639// }
640 m_log.Warn("[MaterialsDemoModule]: exception getting materials: " + e.Message); 640// catch (Exception e)
641 } 641// {
642 } 642// m_log.Warn("[MaterialsDemoModule]: exception getting materials: " + e.Message);
643 } 643// }
644 } 644// }
645 } 645// }
646 } 646// }
647// }
648// }
647 } 649 }
648} \ No newline at end of file 650} \ No newline at end of file