* Change the signature of the agent set appearance callback to prevent unnecessary serialization/deserialization of TextureEntry objects and allow TextureEntry to be inspected for missing bakes
* Inspect incoming TextureEntry updates for bakes that do not exist on the simulator and request the missing textures * Properly handle appearance updates that do not have a TextureEntry setprioritization
parent
041aaaa62c
commit
5dfd2643df
|
@ -826,12 +826,7 @@ namespace OpenSim.Client.MXP.ClientStack
|
||||||
OpenSim.Region.Framework.Scenes.Scene scene=(OpenSim.Region.Framework.Scenes.Scene)Scene;
|
OpenSim.Region.Framework.Scenes.Scene scene=(OpenSim.Region.Framework.Scenes.Scene)Scene;
|
||||||
AvatarAppearance appearance;
|
AvatarAppearance appearance;
|
||||||
scene.GetAvatarAppearance(this,out appearance);
|
scene.GetAvatarAppearance(this,out appearance);
|
||||||
List<byte> visualParams = new List<byte>();
|
OnSetAppearance(appearance.Texture, (byte[])appearance.VisualParams.Clone());
|
||||||
foreach (byte visualParam in appearance.VisualParams)
|
|
||||||
{
|
|
||||||
visualParams.Add(visualParam);
|
|
||||||
}
|
|
||||||
OnSetAppearance(appearance.Texture.GetBytes(), visualParams);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Stop()
|
public void Stop()
|
||||||
|
|
|
@ -380,13 +380,13 @@ namespace OpenSim.Framework
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Set up appearance textures and avatar parameters, including a height calculation
|
/// Set up appearance textures and avatar parameters, including a height calculation
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="texture"></param>
|
public virtual void SetAppearance(Primitive.TextureEntry textureEntry, byte[] visualParams)
|
||||||
/// <param name="visualParam"></param>
|
|
||||||
public virtual void SetAppearance(byte[] texture, List<byte> visualParam)
|
|
||||||
{
|
{
|
||||||
Primitive.TextureEntry textureEnt = new Primitive.TextureEntry(texture, 0, texture.Length);
|
if (textureEntry != null)
|
||||||
m_texture = textureEnt;
|
m_texture = textureEntry;
|
||||||
m_visualparams = visualParam.ToArray();
|
if (visualParams != null)
|
||||||
|
m_visualparams = visualParams;
|
||||||
|
|
||||||
m_avatarHeight = 1.23077f // Shortest possible avatar height
|
m_avatarHeight = 1.23077f // Shortest possible avatar height
|
||||||
+ 0.516945f * (float)m_visualparams[(int)VPElement.SHAPE_HEIGHT] / 255.0f // Body height
|
+ 0.516945f * (float)m_visualparams[(int)VPElement.SHAPE_HEIGHT] / 255.0f // Body height
|
||||||
+ 0.072514f * (float)m_visualparams[(int)VPElement.SHAPE_HEAD_SIZE] / 255.0f // Head size
|
+ 0.072514f * (float)m_visualparams[(int)VPElement.SHAPE_HEAD_SIZE] / 255.0f // Head size
|
||||||
|
|
|
@ -65,7 +65,7 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
public delegate void NetworkStats(int inPackets, int outPackets, int unAckedBytes);
|
public delegate void NetworkStats(int inPackets, int outPackets, int unAckedBytes);
|
||||||
|
|
||||||
public delegate void SetAppearance(byte[] texture, List<byte> visualParamList);
|
public delegate void SetAppearance(Primitive.TextureEntry textureEntry, byte[] visualParams);
|
||||||
|
|
||||||
public delegate void StartAnim(IClientAPI remoteClient, UUID animID);
|
public delegate void StartAnim(IClientAPI remoteClient, UUID animID);
|
||||||
|
|
||||||
|
|
|
@ -227,8 +227,7 @@ namespace OpenSim.Framework.Tests
|
||||||
wearbyte.Add(VisualParams[i]);
|
wearbyte.Add(VisualParams[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AvAppearance.SetAppearance(AvAppearance.Texture, (byte[])VisualParams.Clone());
|
||||||
AvAppearance.SetAppearance(AvAppearance.Texture.GetBytes(), wearbyte);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -5272,13 +5272,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// for the client session anyway, in order to protect ourselves against bad code in plugins
|
// for the client session anyway, in order to protect ourselves against bad code in plugins
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
List<byte> visualparams = new List<byte>();
|
byte[] visualparams = new byte[appear.VisualParam.Length];
|
||||||
foreach (AgentSetAppearancePacket.VisualParamBlock x in appear.VisualParam)
|
for (int i = 0; i < appear.VisualParam.Length; i++)
|
||||||
{
|
visualparams[i] = appear.VisualParam[i].ParamValue;
|
||||||
visualparams.Add(x.ParamValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
handlerSetAppearance(appear.ObjectData.TextureEntry, visualparams);
|
Primitive.TextureEntry te = null;
|
||||||
|
if (appear.ObjectData.TextureEntry.Length > 1)
|
||||||
|
te = new Primitive.TextureEntry(appear.ObjectData.TextureEntry, 0, appear.ObjectData.TextureEntry.Length);
|
||||||
|
|
||||||
|
handlerSetAppearance(te, visualparams);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -73,6 +73,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
private static readonly byte[] BAKE_INDICES = new byte[] { 8, 9, 10, 11, 19, 20 };
|
||||||
|
|
||||||
public static byte[] DefaultTexture;
|
public static byte[] DefaultTexture;
|
||||||
|
|
||||||
public UUID currentParcelUUID = UUID.Zero;
|
public UUID currentParcelUUID = UUID.Zero;
|
||||||
|
@ -2685,7 +2687,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="texture"></param>
|
/// <param name="texture"></param>
|
||||||
/// <param name="visualParam"></param>
|
/// <param name="visualParam"></param>
|
||||||
public void SetAppearance(byte[] texture, List<byte> visualParam)
|
public void SetAppearance(Primitive.TextureEntry textureEntry, byte[] visualParams)
|
||||||
{
|
{
|
||||||
if (m_physicsActor != null)
|
if (m_physicsActor != null)
|
||||||
{
|
{
|
||||||
|
@ -2703,7 +2705,30 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
AddToPhysicalScene(flyingTemp);
|
AddToPhysicalScene(flyingTemp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_appearance.SetAppearance(texture, visualParam);
|
|
||||||
|
#region Bake Cache Check
|
||||||
|
|
||||||
|
if (textureEntry != null)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < BAKE_INDICES.Length; i++)
|
||||||
|
{
|
||||||
|
int j = BAKE_INDICES[i];
|
||||||
|
Primitive.TextureEntryFace face = textureEntry.FaceTextures[j];
|
||||||
|
|
||||||
|
if (face != null && face.TextureID != AppearanceManager.DEFAULT_AVATAR_TEXTURE)
|
||||||
|
{
|
||||||
|
if (m_scene.AssetService.Get(face.TextureID.ToString()) == null)
|
||||||
|
{
|
||||||
|
m_log.Warn("[APPEARANCE]: Missing baked texture " + face.TextureID + " (" + (AppearanceManager.TextureIndex)j + ") for avatar " + this.Name);
|
||||||
|
this.ControllingClient.SendRebakeAvatarTextures(face.TextureID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Bake Cache Check
|
||||||
|
|
||||||
|
m_appearance.SetAppearance(textureEntry, visualParams);
|
||||||
if (m_appearance.AvatarHeight > 0)
|
if (m_appearance.AvatarHeight > 0)
|
||||||
SetHeight(m_appearance.AvatarHeight);
|
SetHeight(m_appearance.AvatarHeight);
|
||||||
m_scene.CommsManager.AvatarService.UpdateUserAppearance(m_controllingClient.AgentId, m_appearance);
|
m_scene.CommsManager.AvatarService.UpdateUserAppearance(m_controllingClient.AgentId, m_appearance);
|
||||||
|
@ -3253,14 +3278,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
wears[i++] = new AvatarWearable(itemId, assetId);
|
wears[i++] = new AvatarWearable(itemId, assetId);
|
||||||
}
|
}
|
||||||
m_appearance.Wearables = wears;
|
m_appearance.Wearables = wears;
|
||||||
byte[] te = null;
|
Primitive.TextureEntry te;
|
||||||
if (cAgent.AgentTextures != null)
|
if (cAgent.AgentTextures != null && cAgent.AgentTextures.Length > 1)
|
||||||
te = cAgent.AgentTextures;
|
te = new Primitive.TextureEntry(cAgent.AgentTextures, 0, cAgent.AgentTextures.Length);
|
||||||
else
|
else
|
||||||
te = AvatarAppearance.GetDefaultTexture().GetBytes();
|
te = AvatarAppearance.GetDefaultTexture();
|
||||||
if ((cAgent.VisualParams == null) || (cAgent.VisualParams.Length < AvatarAppearance.VISUALPARAM_COUNT))
|
if ((cAgent.VisualParams == null) || (cAgent.VisualParams.Length < AvatarAppearance.VISUALPARAM_COUNT))
|
||||||
cAgent.VisualParams = AvatarAppearance.GetDefaultVisualParams();
|
cAgent.VisualParams = AvatarAppearance.GetDefaultVisualParams();
|
||||||
m_appearance.SetAppearance(te, new List<byte>(cAgent.VisualParams));
|
m_appearance.SetAppearance(te, (byte[])cAgent.VisualParams.Clone());
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -861,12 +861,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
||||||
Scene scene = (Scene)Scene;
|
Scene scene = (Scene)Scene;
|
||||||
AvatarAppearance appearance;
|
AvatarAppearance appearance;
|
||||||
scene.GetAvatarAppearance(this, out appearance);
|
scene.GetAvatarAppearance(this, out appearance);
|
||||||
List<byte> visualParams = new List<byte>();
|
OnSetAppearance(appearance.Texture, (byte[])appearance.VisualParams.Clone());
|
||||||
foreach (byte visualParam in appearance.VisualParams)
|
|
||||||
{
|
|
||||||
visualParams.Add(visualParam);
|
|
||||||
}
|
|
||||||
OnSetAppearance(appearance.Texture.GetBytes(), visualParams);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args)
|
public void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args)
|
||||||
|
|
|
@ -163,13 +163,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
{
|
{
|
||||||
AvatarAppearance x = GetAppearance(p_cloneAppearanceFrom, p_scene);
|
AvatarAppearance x = GetAppearance(p_cloneAppearanceFrom, p_scene);
|
||||||
|
|
||||||
List<byte> wearbyte = new List<byte>();
|
sp.SetAppearance(x.Texture, (byte[])x.VisualParams.Clone());
|
||||||
for (int i = 0; i < x.VisualParams.Length; i++)
|
|
||||||
{
|
|
||||||
wearbyte.Add(x.VisualParams[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
sp.SetAppearance(x.Texture.GetBytes(), wearbyte);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_avatars.Add(npcAvatar.AgentId, npcAvatar);
|
m_avatars.Add(npcAvatar.AgentId, npcAvatar);
|
||||||
|
|
Loading…
Reference in New Issue