more changes on the test feature

This commit is contained in:
UbitUmarov
2023-12-02 16:29:58 +00:00
parent acf41e9eef
commit cbdcf3b4a0
5 changed files with 42 additions and 27 deletions

View File

@@ -607,7 +607,7 @@ namespace OpenSim.Framework
{
None = 0,
AttachmentPoint = 1 << 0,
Material = 1 << 1,
MaterialOvr = 1 << 1,
ClickAction = 1 << 2,
Scale = 1 << 3,
ParentID = 1 << 4,
@@ -630,11 +630,12 @@ namespace OpenSim.Framework
Sound = 1 << 21,
TerseUpdate = Position | Rotation | Velocity | Acceleration | AngularVelocity,
FullUpdate = 0x00ffffff,
FullUpdate = 0x00ffffff & ~MaterialOvr,
Animations = 1 << 24,
FullUpdatewithAnim = FullUpdate | Animations,
FullUpdatewithMatOvr = FullUpdate | MaterialOvr,
UpdateProbe = 0x10000000, // 1 << 28
SendInTransit = 0x20000000, // 1 << 29

View File

@@ -4969,11 +4969,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
useCompressUpdate = grp.IsViewerCachable;
istree = (part.Shape.PCode == (byte)PCode.Grass || part.Shape.PCode == (byte)PCode.NewTree || part.Shape.PCode == (byte)PCode.Tree);
if(!istree && part.Shape.RenderMaterials is not null &&
part.Shape.ReflectionProbe is null &&
part.Shape.RenderMaterials.overrides is not null &&
part.Shape.RenderMaterials.overrides.Length > 0)
hasMaterialOverride = true;
if((updateFlags & PrimUpdateFlags.MaterialOvr) != 0)
hasMaterialOverride = !istree;
}
else if (update.Entity is ScenePresence presence)
{
@@ -5498,16 +5495,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
foreach (SceneObjectPart sop in needMaterials)
{
Primitive.RenderMaterials.RenderMaterialOverrideEntry[] overrides = sop.Shape.RenderMaterials.overrides;
OSDMap data = new OSDMap(3);
OSDMap data = new(3);
data["id"] = (int)sop.LocalId;
OSDArray sides = new OSDArray();
OSDArray sidesdata = new OSDArray();
foreach (Primitive.RenderMaterials.RenderMaterialOverrideEntry ovr in overrides)
OSDArray sides = new();
OSDArray sidesdata = new();
if(sop.Shape.RenderMaterials is not null &&
sop.Shape.RenderMaterials.overrides is not null &&
sop.Shape.RenderMaterials.overrides.Length > 0)
{
sides.Add(ovr.te_index);
sidesdata.Add(new OSDllsdxml(ovr.data));
foreach (Primitive.RenderMaterials.RenderMaterialOverrideEntry ovr in sop.Shape.RenderMaterials.overrides)
{
sides.Add(ovr.te_index);
sidesdata.Add(string.IsNullOrEmpty(ovr.data) ? new OSD() : new OSDllsdxml(ovr.data));
}
}
data["te"] = sides;
data["od"] = sidesdata;

View File

@@ -176,9 +176,9 @@ namespace OpenSim.Region.Framework.Scenes
SceneObjectGroup sog = part.ParentGroup;
if(!sog.IsDeleted)
{
PrimUpdateFlags update = PrimUpdateFlags.FullUpdate;
if (sog.RootPart.Shape.MeshFlagEntry)
update = PrimUpdateFlags.FullUpdatewithAnim;
PrimUpdateFlags update = sog.RootPart.Shape.MeshFlagEntry ?
PrimUpdateFlags.FullUpdatewithAnim | PrimUpdateFlags.MaterialOvr :
PrimUpdateFlags.FullUpdatewithMatOvr;
part.SendUpdate(remoteClient, update);
}
}

View File

@@ -2460,18 +2460,32 @@ namespace OpenSim.Region.Framework.Scenes
/// <param name="remoteClient"></param>
public void SendFullAnimUpdateToClient(IClientAPI remoteClient)
{
PrimUpdateFlags update = PrimUpdateFlags.FullUpdate;
if (RootPart.Shape.MeshFlagEntry)
update = PrimUpdateFlags.FullUpdatewithAnim;
PrimUpdateFlags update = RootPart.Shape.MeshFlagEntry ?
PrimUpdateFlags.FullUpdatewithAnim :
PrimUpdateFlags.FullUpdate;
RootPart.SendUpdate(remoteClient, update);
if (RootPart.Shape.RenderMaterials is not null &&
RootPart.Shape.ReflectionProbe is null &&
RootPart.Shape.RenderMaterials.overrides is not null &&
RootPart.Shape.RenderMaterials.overrides.Length > 0)
RootPart.SendUpdate(remoteClient, update | PrimUpdateFlags.MaterialOvr);
else
RootPart.SendUpdate(remoteClient, update);
SceneObjectPart[] parts = m_parts.GetArray();
for (int i = 0; i < parts.Length; i++)
{
SceneObjectPart part = parts[i];
if (part != RootPart)
part.SendUpdate(remoteClient, update);
if (part.LocalId != RootPart.LocalId)
{
if (part.Shape.RenderMaterials is not null &&
part.Shape.ReflectionProbe is null &&
part.Shape.RenderMaterials.overrides is not null &&
part.Shape.RenderMaterials.overrides.Length > 0)
part.SendUpdate(remoteClient, update | PrimUpdateFlags.MaterialOvr);
else
part.SendUpdate(remoteClient, update);
}
}
}
@@ -2485,7 +2499,7 @@ namespace OpenSim.Region.Framework.Scenes
for (int i = 0; i < parts.Length; i++)
{
SceneObjectPart part = parts[i];
if (part != RootPart)
if (part.LocalId != RootPart.LocalId)
part.SendUpdate(remoteClient, update);
}
}

View File

@@ -1008,7 +1008,7 @@ namespace OpenSim.Region.OptionalModules.Materials
foreach (SceneObjectPart sop in changedSOPs)
{
sop.ParentGroup.HasGroupChanged = true;
sop.ScheduleFullUpdate();
sop.ScheduleUpdate(PrimUpdateFlags.MaterialOvr | PrimUpdateFlags.FullUpdate);
}
httpResponse.RawBuffer = XMLkeyMaterialSucess;
@@ -1382,7 +1382,7 @@ namespace OpenSim.Region.OptionalModules.Materials
return false;
}
catch (Exception e)
catch
{
return false;
}