remove a potencial (and silly) deadlock; let other texture parameters changes trigger Changed.TEXTURE event
parent
56d2db3a18
commit
8479658cd0
|
@ -358,7 +358,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
SceneObjectPart part = parts[i];
|
SceneObjectPart part = parts[i];
|
||||||
|
|
||||||
if(m_DeepEffectivePermsInvalid)
|
if(m_DeepEffectivePermsInvalid)
|
||||||
part.AggregateInnerPerms();
|
part.AggregatedInnerPermsForGroup();
|
||||||
|
|
||||||
owner &= part.AggregatedInnerOwnerPerms;
|
owner &= part.AggregatedInnerOwnerPerms;
|
||||||
group &= part.AggregatedInnerGroupPerms;
|
group &= part.AggregatedInnerGroupPerms;
|
||||||
|
|
|
@ -2579,9 +2579,30 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
AggregatedInnerOwnerPerms = owner & mask;
|
AggregatedInnerOwnerPerms = owner & mask;
|
||||||
AggregatedInnerGroupPerms = group & mask;
|
AggregatedInnerGroupPerms = group & mask;
|
||||||
AggregatedInnerEveryonePerms = everyone & mask;
|
AggregatedInnerEveryonePerms = everyone & mask;
|
||||||
|
}
|
||||||
if(ParentGroup != null)
|
if(ParentGroup != null)
|
||||||
ParentGroup.InvalidateEffectivePerms();
|
ParentGroup.InvalidateEffectivePerms();
|
||||||
}
|
}
|
||||||
|
// same as above but called during group Effective Permission validation
|
||||||
|
public void AggregatedInnerPermsForGroup()
|
||||||
|
{
|
||||||
|
// assuming child prims permissions masks are irrelevant on a linkset
|
||||||
|
// root part is handle at SOG since its masks are the sog masks
|
||||||
|
const uint mask = (uint)PermissionMask.AllEffective;
|
||||||
|
|
||||||
|
uint owner = mask;
|
||||||
|
uint group = mask;
|
||||||
|
uint everyone = mask;
|
||||||
|
|
||||||
|
lock(InnerPermsLock) // do we really need this?
|
||||||
|
{
|
||||||
|
if(Inventory != null)
|
||||||
|
Inventory.AggregateInnerPerms(ref owner, ref group, ref everyone);
|
||||||
|
|
||||||
|
AggregatedInnerOwnerPerms = owner & mask;
|
||||||
|
AggregatedInnerGroupPerms = group & mask;
|
||||||
|
AggregatedInnerEveryonePerms = everyone & mask;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector3 GetGeometricCenter()
|
public Vector3 GetGeometricCenter()
|
||||||
|
@ -3817,7 +3838,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
Byte[] buf = Shape.Textures.GetBytes();
|
Byte[] buf = Shape.Textures.GetBytes();
|
||||||
Primitive.TextureEntry tex = new Primitive.TextureEntry(buf, 0, buf.Length);
|
Primitive.TextureEntry tex = new Primitive.TextureEntry(buf, 0, buf.Length);
|
||||||
Color4 texcolor;
|
Color4 texcolor;
|
||||||
if (face >= 0 && face < GetNumberOfSides())
|
int nsides = GetNumberOfSides();
|
||||||
|
if (face >= 0 && face < nsides)
|
||||||
{
|
{
|
||||||
texcolor = tex.CreateFace((uint)face).RGBA;
|
texcolor = tex.CreateFace((uint)face).RGBA;
|
||||||
texcolor.R = clippedColor.X;
|
texcolor.R = clippedColor.X;
|
||||||
|
@ -3833,7 +3855,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
else if (face == ALL_SIDES)
|
else if (face == ALL_SIDES)
|
||||||
{
|
{
|
||||||
for (uint i = 0; i < GetNumberOfSides(); i++)
|
for (uint i = 0; i < nsides; i++)
|
||||||
{
|
{
|
||||||
if (tex.FaceTextures[i] != null)
|
if (tex.FaceTextures[i] != null)
|
||||||
{
|
{
|
||||||
|
@ -5138,20 +5160,20 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
Changed changeFlags = 0;
|
Changed changeFlags = 0;
|
||||||
|
|
||||||
Primitive.TextureEntryFace fallbackNewFace = newTex.DefaultTexture;
|
Primitive.TextureEntryFace defaultNewFace = newTex.DefaultTexture;
|
||||||
Primitive.TextureEntryFace fallbackOldFace = oldTex.DefaultTexture;
|
Primitive.TextureEntryFace defaultOldFace = oldTex.DefaultTexture;
|
||||||
|
|
||||||
// On Incoming packets, sometimes newText.DefaultTexture is null. The assumption is that all
|
// On Incoming packets, sometimes newText.DefaultTexture is null. The assumption is that all
|
||||||
// other prim-sides are set, but apparently that's not always the case. Lets assume packet/data corruption at this point.
|
// other prim-sides are set, but apparently that's not always the case. Lets assume packet/data corruption at this point.
|
||||||
if (fallbackNewFace == null)
|
if (defaultNewFace == null)
|
||||||
{
|
{
|
||||||
fallbackNewFace = new Primitive.TextureEntry(Util.BLANK_TEXTURE_UUID).CreateFace(0);
|
defaultNewFace = new Primitive.TextureEntry(Util.BLANK_TEXTURE_UUID).CreateFace(0);
|
||||||
newTex.DefaultTexture = fallbackNewFace;
|
newTex.DefaultTexture = defaultNewFace;
|
||||||
}
|
}
|
||||||
if (fallbackOldFace == null)
|
if (defaultOldFace == null)
|
||||||
{
|
{
|
||||||
fallbackOldFace = new Primitive.TextureEntry(Util.BLANK_TEXTURE_UUID).CreateFace(0);
|
defaultOldFace = new Primitive.TextureEntry(Util.BLANK_TEXTURE_UUID).CreateFace(0);
|
||||||
oldTex.DefaultTexture = fallbackOldFace;
|
oldTex.DefaultTexture = defaultOldFace;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Materials capable viewers can send a ObjectImage packet
|
// Materials capable viewers can send a ObjectImage packet
|
||||||
|
@ -5161,13 +5183,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// we should ignore any changes and not update Shape.TextureEntry
|
// we should ignore any changes and not update Shape.TextureEntry
|
||||||
|
|
||||||
bool otherFieldsChanged = false;
|
bool otherFieldsChanged = false;
|
||||||
|
int nsides = GetNumberOfSides();
|
||||||
for (int i = 0 ; i < GetNumberOfSides(); i++)
|
for (int i = 0 ; i < nsides; i++)
|
||||||
{
|
{
|
||||||
|
Primitive.TextureEntryFace newFace = defaultNewFace;
|
||||||
Primitive.TextureEntryFace newFace = newTex.DefaultTexture;
|
Primitive.TextureEntryFace oldFace = defaultOldFace;
|
||||||
Primitive.TextureEntryFace oldFace = oldTex.DefaultTexture;
|
|
||||||
|
|
||||||
if (oldTex.FaceTextures[i] != null)
|
if (oldTex.FaceTextures[i] != null)
|
||||||
oldFace = oldTex.FaceTextures[i];
|
oldFace = oldTex.FaceTextures[i];
|
||||||
if (newTex.FaceTextures[i] != null)
|
if (newTex.FaceTextures[i] != null)
|
||||||
|
@ -5202,18 +5222,17 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (oldFace.Rotation != newFace.Rotation) otherFieldsChanged = true;
|
if (oldFace.Rotation != newFace.Rotation) otherFieldsChanged = true;
|
||||||
if (oldFace.Shiny != newFace.Shiny) otherFieldsChanged = true;
|
if (oldFace.Shiny != newFace.Shiny) otherFieldsChanged = true;
|
||||||
if (oldFace.TexMapType != newFace.TexMapType) otherFieldsChanged = true;
|
if (oldFace.TexMapType != newFace.TexMapType) otherFieldsChanged = true;
|
||||||
|
if(otherFieldsChanged)
|
||||||
|
changeFlags |= Changed.TEXTURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changeFlags != 0 || otherFieldsChanged)
|
|
||||||
{
|
|
||||||
m_shape.TextureEntry = newTex.GetBytes();
|
m_shape.TextureEntry = newTex.GetBytes();
|
||||||
if (changeFlags != 0)
|
if (changeFlags != 0)
|
||||||
TriggerScriptChangedEvent(changeFlags);
|
TriggerScriptChangedEvent(changeFlags);
|
||||||
ParentGroup.HasGroupChanged = true;
|
ParentGroup.HasGroupChanged = true;
|
||||||
ScheduleFullUpdate();
|
ScheduleFullUpdate();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
internal void UpdatePhysicsSubscribedEvents()
|
internal void UpdatePhysicsSubscribedEvents()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue