mirror of
https://github.com/opensim/opensim.git
synced 2026-08-06 09:16:28 +08:00
more changes on the test feature
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user