aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
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 /OpenSim/Region/Framework/Scenes/UuidGatherer.cs
parentadd method docs for DAMap.GetStore() and DAMap.SetStore() (diff)
downloadopensim-SC-f6ce87c96d037787963d203346c5cb1a1dd52747.zip
opensim-SC-f6ce87c96d037787963d203346c5cb1a1dd52747.tar.gz
opensim-SC-f6ce87c96d037787963d203346c5cb1a1dd52747.tar.bz2
opensim-SC-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.
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/UuidGatherer.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/UuidGatherer.cs71
1 files changed, 70 insertions, 1 deletions
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