a few more changes on test feature

This commit is contained in:
UbitUmarov
2023-03-14 17:30:01 +00:00
parent badd80e1b9
commit 0faf418f0c
5 changed files with 71 additions and 24 deletions

View File

@@ -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;

View File

@@ -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>

View File

@@ -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);

View File

@@ -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
}
}

View File

@@ -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;