rather than converting existing materials to assets, just retrieve them and make them available for viewing. Any new materials added to the scene will become assets.

master-beforevarregion
dahlia 2014-01-20 13:57:14 -08:00
parent 719810e9d8
commit af58631f00
1 changed files with 12 additions and 32 deletions

View File

@ -149,12 +149,10 @@ namespace OpenSim.Region.OptionalModules.Materials
}
/// <summary>
/// Searches the part for any legacy materials stored in DynAttrs and converts them to assets, replacing
/// the MaterialIDs in the TextureEntries for the part.
/// Deletes the legacy materials from the part as they are no longer needed.
/// Finds any legacy materials stored in DynAttrs that may exist for this part and add them to 'm_regionMaterials'.
/// </summary>
/// <param name="part"></param>
private void ConvertLegacyMaterialsInPart(SceneObjectPart part)
private void GetLegacyStoredMaterialsInPart(SceneObjectPart part)
{
if (part.DynAttrs == null)
return;
@ -183,10 +181,6 @@ namespace OpenSim.Region.OptionalModules.Materials
if (matsArr == null)
return;
var te = new Primitive.TextureEntry(part.Shape.TextureEntry, 0, part.Shape.TextureEntry.Length);
if (te == null)
return;
foreach (OSD elemOsd in matsArr)
{
if (elemOsd != null && elemOsd is OSDMap)
@ -194,32 +188,18 @@ namespace OpenSim.Region.OptionalModules.Materials
OSDMap matMap = elemOsd as OSDMap;
if (matMap.ContainsKey("ID") && matMap.ContainsKey("Material"))
{
UUID id = matMap["ID"].AsUUID();
OSDMap material = (OSDMap)matMap["Material"];
bool used = false;
foreach (var face in te.FaceTextures)
if (face != null && face.MaterialID == id)
used = true;
if (used)
{ // store legacy material in new asset format, and update the part texture entry with the new hashed UUID
var newId = StoreMaterialAsAsset(part.CreatorID, material, part);
foreach (var face in te.FaceTextures)
if (face != null && face.MaterialID == id)
face.MaterialID = newId;
try
{
lock (m_regionMaterials)
m_regionMaterials[matMap["ID"].AsUUID()] = (OSDMap)matMap["Material"];
}
catch (Exception e)
{
m_log.Warn("[Materials]: exception decoding persisted legacy material: " + e.ToString());
}
}
}
}
part.Shape.TextureEntry = te.GetBytes();
part.ParentGroup.HasGroupChanged = true;
part.ScheduleFullUpdate();
lock (part.DynAttrs)
part.DynAttrs.RemoveStore("OpenSim", "Materials");
}
/// <summary>
@ -230,12 +210,12 @@ namespace OpenSim.Region.OptionalModules.Materials
if (part.Shape == null)
return;
ConvertLegacyMaterialsInPart(part);
var te = new Primitive.TextureEntry(part.Shape.TextureEntry, 0, part.Shape.TextureEntry.Length);
if (te == null)
return;
GetLegacyStoredMaterialsInPart(part);
GetStoredMaterialInFace(part, te.DefaultTexture);
foreach (Primitive.TextureEntryFace face in te.FaceTextures)