mirror of
https://github.com/opensim/opensim.git
synced 2026-08-06 01:06:30 +08:00
a few more changes on test feature
This commit is contained in:
@@ -1301,7 +1301,7 @@ namespace OpenSim.Data.SQLite
|
||||
createCol(shapes, "Texture", typeof(Byte[]));
|
||||
createCol(shapes, "ExtraParams", typeof(Byte[]));
|
||||
createCol(shapes, "Media", typeof(String));
|
||||
createCol(shapes, "NatOvrd", typeof(byte[]));
|
||||
createCol(shapes, "MatOvrd", typeof(byte[]));
|
||||
shapes.PrimaryKey = new DataColumn[] { shapes.Columns["UUID"] };
|
||||
|
||||
return shapes;
|
||||
|
||||
@@ -1493,8 +1493,16 @@ namespace OpenSim.Framework
|
||||
return null;
|
||||
|
||||
osUTF8 sb = OSUTF8Cached.Acquire();
|
||||
|
||||
sb.Append((byte)RenderMaterials.overrides.Length);
|
||||
int nentries = 0;
|
||||
for (int i = 0; i < RenderMaterials.overrides.Length; i++)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(RenderMaterials.overrides[i].data))
|
||||
nentries++;
|
||||
}
|
||||
if(nentries == 0)
|
||||
return null;
|
||||
|
||||
sb.Append((byte)nentries);
|
||||
for (int i = 0; i < RenderMaterials.overrides.Length; i++)
|
||||
{
|
||||
if (string.IsNullOrEmpty(RenderMaterials.overrides[i].data))
|
||||
@@ -1510,7 +1518,7 @@ namespace OpenSim.Framework
|
||||
|
||||
public void RenderMaterialsOvrFromRawBin(byte[] data)
|
||||
{
|
||||
if (RenderMaterials is not null && RenderMaterials.overrides is not null)
|
||||
if (RenderMaterials is not null && RenderMaterials.overrides != null)
|
||||
RenderMaterials.overrides = null;
|
||||
if (data is null || data.Length < 16)
|
||||
return;
|
||||
@@ -1529,9 +1537,12 @@ namespace OpenSim.Framework
|
||||
overrides[i].data = Utils.BytesToString(data,indx, ovrlen);
|
||||
indx += ovrlen;
|
||||
}
|
||||
RenderMaterials ??= new Primitive.RenderMaterials();
|
||||
RenderMaterials.overrides = overrides;
|
||||
}
|
||||
catch { }
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -5496,7 +5496,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>();
|
||||
if (needMaterials is not null && eq is not null)
|
||||
{
|
||||
Utils.LongToUInts(m_scene.RegionInfo.RegionHandle, out uint regionX, out uint regionY);
|
||||
foreach (SceneObjectPart sop in needMaterials)
|
||||
{
|
||||
Primitive.RenderMaterials.RenderMaterialOverrideEntry[] overrides = sop.Shape.RenderMaterials.overrides;
|
||||
@@ -5505,8 +5504,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
LLSDxmlEncode2.AddArray(sbinner);
|
||||
LLSDxmlEncode2.AddMap(sbinner);
|
||||
LLSDxmlEncode2.AddElem("object_id", sop.UUID, sbinner);
|
||||
LLSDxmlEncode2.AddElem("region_handle_low", (int)regionX, sbinner);
|
||||
LLSDxmlEncode2.AddElem("region_handle_high", (int)regionY, sbinner);
|
||||
LLSDxmlEncode2.AddElem("region_handle_low", (int)m_scene.RegionInfo.WorldLocX, sbinner);
|
||||
LLSDxmlEncode2.AddElem("region_handle_high", (int)m_scene.RegionInfo.WorldLocY, sbinner);
|
||||
LLSDxmlEncode2.AddArray("sides", sbinner);
|
||||
foreach (Primitive.RenderMaterials.RenderMaterialOverrideEntry ovr in overrides)
|
||||
LLSDxmlEncode2.AddElem(ovr.te_index, sbinner);
|
||||
@@ -5522,8 +5521,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
*/
|
||||
OSDMap data = new OSDMap();
|
||||
data["object_id"] = sop.UUID;
|
||||
//data["region_handle_low"]= (int)regionX;
|
||||
//data["region_handle_high"]= (int)regionY;
|
||||
data["region_handle_x"]= (int)m_scene.RegionInfo.WorldLocX;
|
||||
data["region_handle_y"]= (int)m_scene.RegionInfo.WorldLocY;
|
||||
OSDArray sides = new OSDArray();
|
||||
foreach (Primitive.RenderMaterials.RenderMaterialOverrideEntry ovr in overrides)
|
||||
sides.Add(ovr.te_index);
|
||||
|
||||
@@ -221,8 +221,8 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||
public static void ToOriginalXmlFormat(
|
||||
SceneObjectGroup sceneObject, XmlTextWriter writer, bool doScriptStates, bool noRootElement)
|
||||
{
|
||||
// m_log.DebugFormat("[SERIALIZER]: Starting serialization of {0}", sceneObject.Name);
|
||||
// int time = System.Environment.TickCount;
|
||||
//m_log.DebugFormat("[SERIALIZER]: Starting serialization of {0}", sceneObject.Name);
|
||||
//int time = System.Environment.TickCount;
|
||||
|
||||
if (!noRootElement)
|
||||
writer.WriteStartElement(string.Empty, "SceneObjectGroup", string.Empty);
|
||||
@@ -261,7 +261,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||
if (!noRootElement)
|
||||
writer.WriteEndElement(); // SceneObjectGroup
|
||||
|
||||
// m_log.DebugFormat("[SERIALIZER]: Finished serialization of SOG {0}, {1}ms", sceneObject.Name, System.Environment.TickCount - time);
|
||||
//m_log.DebugFormat("[SERIALIZER]: Finished serialization of SOG {0}, {1}ms", sceneObject.Name, System.Environment.TickCount - time);
|
||||
}
|
||||
|
||||
protected static void ToXmlFormat(SceneObjectPart part, XmlTextWriter writer)
|
||||
@@ -331,7 +331,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||
// Script state may, or may not, exist. Not having any, is NOT
|
||||
// ever a problem.
|
||||
sceneObject.LoadScriptState(doc);
|
||||
// sceneObject.AggregatePerms();
|
||||
//sceneObject.AggregatePerms();
|
||||
return sceneObject;
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -598,7 +598,8 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||
{"FlexiEntry", ProcessShpFlexiEntry },
|
||||
{"LightEntry", ProcessShpLightEntry },
|
||||
{"SculptEntry", ProcessShpSculptEntry },
|
||||
{"Media", ProcessShpMedia }
|
||||
{"Media", ProcessShpMedia },
|
||||
{"MatOvrd", ProcessShpMatOvrd }
|
||||
};
|
||||
|
||||
#region SOPXmlProcessors
|
||||
@@ -855,16 +856,15 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||
obj.Animations = null;
|
||||
try
|
||||
{
|
||||
string datastr;
|
||||
datastr = reader.ReadElementContentAsString();
|
||||
if(string.IsNullOrEmpty(datastr))
|
||||
string datastr = reader.ReadElementContentAsString();
|
||||
if (string.IsNullOrEmpty(datastr))
|
||||
return;
|
||||
|
||||
byte[] pdata = Convert.FromBase64String(datastr);
|
||||
obj.DeSerializeAnimations(pdata);
|
||||
return;
|
||||
}
|
||||
catch {}
|
||||
catch { }
|
||||
|
||||
m_log.DebugFormat(
|
||||
"[SceneObjectSerializer]: Parsing ProcessSOPAnims for object part {0} {1} encountered errors",
|
||||
@@ -1465,6 +1465,24 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
private static void ProcessShpMatOvrd(PrimitiveBaseShape shp, XmlReader reader)
|
||||
{
|
||||
try
|
||||
{
|
||||
string datastr = reader.ReadElementContentAsString();
|
||||
if (!string.IsNullOrEmpty(datastr))
|
||||
{
|
||||
byte[] pdata = Convert.FromBase64String(datastr);
|
||||
shp.RenderMaterialsOvrFromRawBin(pdata);
|
||||
}
|
||||
return;
|
||||
}
|
||||
catch
|
||||
{
|
||||
shp.RenderMaterialsOvrFromRawBin(null);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
////////// Write /////////
|
||||
@@ -1839,9 +1857,17 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||
writer.WriteElementString("LightEntry", shp.LightEntry.ToString().ToLower());
|
||||
writer.WriteElementString("SculptEntry", shp.SculptEntry.ToString().ToLower());
|
||||
|
||||
if (shp.Media != null)
|
||||
if (shp.Media is not null)
|
||||
writer.WriteElementString("Media", shp.Media.ToXml());
|
||||
|
||||
byte[] matoverrides = shp.RenderMaterialsOvrToRawBin();
|
||||
if(matoverrides is not null)
|
||||
{
|
||||
writer.WriteStartElement("MatOvrd");
|
||||
writer.WriteBase64(matoverrides, 0, matoverrides.Length);
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
|
||||
writer.WriteEndElement(); // Shape
|
||||
}
|
||||
}
|
||||
|
||||
@@ -401,12 +401,23 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
if (part.Shape.ProjectionTextureUUID.IsNotZero())
|
||||
GatheredUuids[part.Shape.ProjectionTextureUUID] = (sbyte)AssetType.Texture;
|
||||
|
||||
if(part.Shape.RenderMaterials is not null && part.Shape.RenderMaterials.entries is not null)
|
||||
if(part.Shape.RenderMaterials is not null)
|
||||
{
|
||||
for(int j = 0; j < part.Shape.RenderMaterials.entries.Length; ++j)
|
||||
if (part.Shape.RenderMaterials.entries is not null)
|
||||
{
|
||||
if(part.Shape.RenderMaterials.entries[j].id.IsNotZero())
|
||||
AddForInspection(part.Shape.RenderMaterials.entries[j].id, (sbyte)AssetType.Material);
|
||||
for (int j = 0; j < part.Shape.RenderMaterials.entries.Length; ++j)
|
||||
{
|
||||
if (part.Shape.RenderMaterials.entries[j].id.IsNotZero())
|
||||
AddForInspection(part.Shape.RenderMaterials.entries[j].id, (sbyte)AssetType.Material);
|
||||
}
|
||||
}
|
||||
if (part.Shape.RenderMaterials.overrides is not null)
|
||||
{
|
||||
for (int j = 0; j < part.Shape.RenderMaterials.overrides.Length; ++j)
|
||||
{
|
||||
//if(!string.IsNullOrEmpty(part.Shape.RenderMaterials.overrides[j].data))
|
||||
//AddForInspection(part.Shape.RenderMaterials.overrides[j].data, (sbyte)AssetType.Material);
|
||||
}
|
||||
}
|
||||
}
|
||||
UUID collisionSound = part.CollisionSound;
|
||||
|
||||
Reference in New Issue
Block a user