mirror of https://github.com/opensim/opensim.git
add some missing matovr full updates
This commit is contained in:
parent
4a3cfd1004
commit
23daf5340b
|
@ -636,6 +636,7 @@ namespace OpenSim.Framework
|
|||
|
||||
FullUpdatewithAnim = FullUpdate | Animations,
|
||||
FullUpdatewithMatOvr = FullUpdate | MaterialOvr,
|
||||
FullUpdatewithAnimMatOvr = FullUpdate | Animations | MaterialOvr,
|
||||
|
||||
UpdateProbe = 0x10000000, // 1 << 28
|
||||
SendInTransit = 0x20000000, // 1 << 29
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace OpenSim.Framework
|
||||
|
@ -170,7 +171,7 @@ namespace OpenSim.Framework
|
|||
{
|
||||
lock (m_syncRoot)
|
||||
{
|
||||
if (m_array == null)
|
||||
if (m_array is null)
|
||||
{
|
||||
if(m_dict.Count == 0)
|
||||
return Array.Empty<TValue>();
|
||||
|
@ -180,5 +181,11 @@ namespace OpenSim.Framework
|
|||
return m_array;
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public Span<TValue> GetSpan()
|
||||
{
|
||||
return new Span<TValue>(GetArray());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -293,7 +293,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
rootGroup.LinkToGroup(allparts[j]);
|
||||
}
|
||||
|
||||
rootGroup.ScheduleGroupForFullAnimUpdate();
|
||||
rootGroup.ScheduleGroupForUpdate(PrimUpdateFlags.FullUpdatewithAnimMatOvr);
|
||||
|
||||
httpResponse.StatusCode = (int)HttpStatusCode.OK;
|
||||
httpResponse.RawBuffer = Util.UTF8NBGetbytes(String.Format("<llsd><map><key>local_id</key>{0}</map></llsd>", ConvertUintToBytes(allparts[0].LocalId)));
|
||||
|
|
|
@ -1109,7 +1109,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
|||
group.CreateScriptInstances(0, true, m_Scene.DefaultScriptEngine, 1);
|
||||
rootPart.ParentGroup.ResumeScripts();
|
||||
|
||||
group.ScheduleGroupForFullAnimUpdate();
|
||||
group.ScheduleGroupForUpdate(PrimUpdateFlags.FullUpdatewithAnimMatOvr);
|
||||
}
|
||||
else
|
||||
m_Scene.AddNewSceneObject(group, true, false);
|
||||
|
|
|
@ -2807,7 +2807,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if(humanRez)
|
||||
group.ResumeScripts();
|
||||
|
||||
group.ScheduleGroupForFullAnimUpdate();
|
||||
group.ScheduleGroupForUpdate(PrimUpdateFlags.FullUpdatewithAnimMatOvr);
|
||||
}
|
||||
|
||||
return objlist;
|
||||
|
|
|
@ -2587,8 +2587,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
|
||||
sceneObject.InvalidateDeepEffectivePerms();
|
||||
sceneObject.ScheduleGroupForFullAnimUpdate();
|
||||
|
||||
sceneObject.ScheduleGroupForUpdate(PrimUpdateFlags.FullUpdatewithAnimMatOvr);
|
||||
return sceneObject;
|
||||
}
|
||||
|
||||
|
|
|
@ -497,7 +497,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
|
||||
if (sendClientUpdates)
|
||||
sceneObject.ScheduleGroupForFullAnimUpdate();
|
||||
sceneObject.ScheduleGroupForUpdate(PrimUpdateFlags.FullUpdatewithAnimMatOvr);
|
||||
|
||||
if (attachToBackup)
|
||||
sceneObject.AttachToBackup();
|
||||
|
@ -2189,7 +2189,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
copy.ResumeScripts();
|
||||
|
||||
copy.HasGroupChanged = true;
|
||||
copy.ScheduleGroupForFullAnimUpdate();
|
||||
copy.ScheduleGroupForUpdate(PrimUpdateFlags.FullUpdatewithAnimMatOvr);
|
||||
return copy;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1025,7 +1025,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
sog.inTransit = false;
|
||||
AttachToBackup();
|
||||
sog.ScheduleGroupForFullAnimUpdate();
|
||||
sog.ScheduleGroupForUpdate(PrimUpdateFlags.FullUpdatewithAnimMatOvr);
|
||||
}
|
||||
|
||||
private class TeleportObjectData
|
||||
|
@ -1520,10 +1520,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_rootPart.LocalId = m_scene.AllocateLocalId();
|
||||
|
||||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
SceneObjectPart part;
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
part = parts[i];
|
||||
SceneObjectPart part = parts[i];
|
||||
part.KeyframeMotion?.UpdateSceneObject(this);
|
||||
|
||||
if (Object.ReferenceEquals(part, m_rootPart))
|
||||
|
@ -1602,10 +1601,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
maxZ = scale.Z;
|
||||
|
||||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
SceneObjectPart part;
|
||||
for (int i = 0; i < parts.Length; ++i)
|
||||
{
|
||||
part = parts[i];
|
||||
SceneObjectPart part = parts[i];
|
||||
if(part.LocalId == rootid)
|
||||
continue;
|
||||
|
||||
|
@ -1673,10 +1671,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
Vector3 absPos = AbsolutePosition;
|
||||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
SceneObjectPart part;
|
||||
for(int i = 0; i< parts.Length; ++i)
|
||||
{
|
||||
part = parts[i];
|
||||
SceneObjectPart part = parts[i];
|
||||
Vector3 offset = part.GetWorldPosition() - absPos;
|
||||
Vector3 scale = part.Scale * 0.5f;
|
||||
|
||||
|
@ -1796,12 +1793,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
float areaF = 0;
|
||||
float partR;
|
||||
Vector3 offset = Vector3.Zero;
|
||||
SceneObjectPart p;
|
||||
|
||||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
p = parts[i];
|
||||
SceneObjectPart p = parts[i];
|
||||
partR = 0.5f * p.Scale.Length();
|
||||
if(p != RootPart)
|
||||
{
|
||||
|
@ -1840,13 +1837,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
bool ComplexCost = false;
|
||||
|
||||
SceneObjectPart p;
|
||||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
p = parts[i];
|
||||
|
||||
if (p.UsesComplexCost)
|
||||
if (parts[i].UsesComplexCost)
|
||||
{
|
||||
ComplexCost = true;
|
||||
break;
|
||||
|
@ -1862,7 +1856,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
p = parts[i];
|
||||
SceneObjectPart p = parts[i];
|
||||
|
||||
cost = p.StreamingCost;
|
||||
tmpcost = p.SimulationCost;
|
||||
|
@ -2579,7 +2573,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
dupe.HasGroupChanged = true;
|
||||
dupe.AttachToBackup();
|
||||
|
||||
dupe.ScheduleGroupForFullAnimUpdate();
|
||||
dupe.ScheduleGroupForUpdate(PrimUpdateFlags.FullUpdatewithAnimMatOvr);
|
||||
}
|
||||
|
||||
dupe.InvalidatePartsLinkMaps();
|
||||
|
@ -2976,6 +2970,26 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
public void ScheduleGroupForUpdate(PrimUpdateFlags update)
|
||||
{
|
||||
//if (IsAttachment)
|
||||
// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, LocalId);
|
||||
if (Scene.GetNumberOfClients() == 0)
|
||||
return;
|
||||
|
||||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
if (!RootPart.Shape.MeshFlagEntry)
|
||||
update &= ~PrimUpdateFlags.Animations;
|
||||
|
||||
RootPart.ScheduleUpdate(update);
|
||||
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
SceneObjectPart part = parts[i];
|
||||
if (part != RootPart)
|
||||
part.ScheduleUpdate(update);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Schedule a terse update for this scene object to all interested viewers.
|
||||
/// </summary>
|
||||
|
@ -3062,10 +3076,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
return RootPart;
|
||||
|
||||
Span<SceneObjectPart> parts = m_parts.GetArray().AsSpan();
|
||||
SceneObjectPart sop;
|
||||
if (linknum <= parts.Length)
|
||||
{
|
||||
sop = parts[linknum - 1];
|
||||
SceneObjectPart sop = parts[linknum - 1];
|
||||
if (sop.LinkNum == linknum)
|
||||
return sop;
|
||||
}
|
||||
|
@ -4079,7 +4092,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
|
||||
// fix scaling factors so parts don't violate dimensions
|
||||
for(int i = 0;i < parts.Length;i++)
|
||||
for(int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
SceneObjectPart obPart = parts[i];
|
||||
if(obPart.UUID != m_rootPart.UUID)
|
||||
|
@ -4443,7 +4456,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
SceneObjectPart obPart = parts[i];
|
||||
if (obPart.UUID != m_rootPart.UUID)
|
||||
if (obPart != m_rootPart)
|
||||
obPart.OffsetPosition += diff;
|
||||
}
|
||||
|
||||
|
@ -4594,7 +4607,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
SceneObjectPart prim = parts[i];
|
||||
if (prim.UUID != m_rootPart.UUID)
|
||||
if (prim != m_rootPart)
|
||||
{
|
||||
Quaternion NewRot = oldParentRot * prim.RotationOffset;
|
||||
NewRot = Quaternion.Inverse(axRot) * NewRot;
|
||||
|
|
|
@ -3230,11 +3230,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public void ScheduleUpdate(PrimUpdateFlags update)
|
||||
{
|
||||
if (ParentGroup == null || ParentGroup.IsDeleted || ParentGroup.Scene == null)
|
||||
if (ParentGroup is null || ParentGroup.IsDeleted)
|
||||
return;
|
||||
|
||||
if (Animations == null)
|
||||
if (Animations is null)
|
||||
update &= ~PrimUpdateFlags.Animations;
|
||||
if (Shape is null || Shape.RenderMaterials is null)
|
||||
update &= ~PrimUpdateFlags.MaterialOvr;
|
||||
|
||||
if (update == PrimUpdateFlags.None)
|
||||
return;
|
||||
|
||||
|
@ -3244,12 +3247,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (ParentGroup.Scene.GetNumberOfClients() == 0)
|
||||
return;
|
||||
|
||||
bool isfull = false;
|
||||
bool isfull;
|
||||
if (ParentGroup.IsAttachment)
|
||||
{
|
||||
update |= PrimUpdateFlags.FullUpdate;
|
||||
isfull = true;
|
||||
}
|
||||
else
|
||||
isfull = (update & PrimUpdateFlags.FullUpdate) == PrimUpdateFlags.FullUpdate;
|
||||
|
||||
lock (UpdateFlagLock)
|
||||
UpdateFlag |= update;
|
||||
|
|
Loading…
Reference in New Issue