aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
diff options
context:
space:
mode:
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