Add "appearance rebake" command to ask a specific viewer to rebake textures from the server end.

This is not as useful as it sounds, since you can only request rebakes for texture IDs already received.
In other words, if the viewer has never sent the server this information (which happens quite often) then it will have no effect.
Nonetheless, this is useful for diagnostic/debugging purposes.
0.7.2-post-fixes
Justin Clark-Casey (justincc) 2012-01-09 13:07:39 +00:00
parent 4d28bac9bb
commit 9474bdb6df
2 changed files with 53 additions and 6 deletions

View File

@ -181,12 +181,21 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
if (face.TextureID == UUID.Zero || face.TextureID == AppearanceManager.DEFAULT_AVATAR_TEXTURE) if (face.TextureID == UUID.Zero || face.TextureID == AppearanceManager.DEFAULT_AVATAR_TEXTURE)
continue; continue;
if (missingTexturesOnly && m_scene.AssetService.Get(face.TextureID.ToString()) != null) if (missingTexturesOnly)
continue; {
if (m_scene.AssetService.Get(face.TextureID.ToString()) != null)
continue;
else
m_log.DebugFormat(
"[AVFACTORY]: Missing baked texture {0} ({1}) for {2}, requesting rebake.",
face.TextureID, idx, sp.Name);
}
else else
m_log.DebugFormat( {
"[AVFACTORY]: Missing baked texture {0} ({1}) for {2}, requesting rebake.", m_log.DebugFormat(
face.TextureID, idx, sp.Name); "[AVFACTORY]: Requesting rebake of {0} ({1}) for {2}.",
face.TextureID, idx, sp.Name);
}
sp.ControllingClient.SendRebakeAvatarTextures(face.TextureID); sp.ControllingClient.SendRebakeAvatarTextures(face.TextureID);
} }

View File

@ -116,6 +116,16 @@ namespace OpenSim.Region.OptionalModules.Avatar.Appearance
"Send appearance data for each avatar in the simulator to other viewers.", "Send appearance data for each avatar in the simulator to other viewers.",
"Optionally, you can specify that only a particular avatar's appearance data is sent.", "Optionally, you can specify that only a particular avatar's appearance data is sent.",
HandleSendAppearanceCommand); HandleSendAppearanceCommand);
scene.AddCommand(
this, "appearance rebake",
"appearance rebake <first-name> <last-name>",
"Send a request to the user's viewer for it to rebake and reupload its appearance textures.",
"This is currently done for all baked texture references previously received, whether the simulator can find the asset or not."
+ "\nThis will only work for texture ids that the viewer has already uploaded."
+ "\nIf the viewer has not yet sent the server any texture ids then nothing will happen"
+ "\nsince requests can only be made for ids that the client has already sent us",
HandleRebakeAppearanceCommand);
} }
private void HandleSendAppearanceCommand(string module, string[] cmd) private void HandleSendAppearanceCommand(string module, string[] cmd)
@ -243,6 +253,34 @@ namespace OpenSim.Region.OptionalModules.Avatar.Appearance
} }
} }
} }
} }
private void HandleRebakeAppearanceCommand(string module, string[] cmd)
{
if (cmd.Length != 4)
{
MainConsole.Instance.OutputFormat("Usage: appearance rebake <first-name> <last-name>");
return;
}
string firstname = cmd[2];
string lastname = cmd[3];
lock (m_scenes)
{
foreach (Scene scene in m_scenes.Values)
{
ScenePresence sp = scene.GetScenePresence(firstname, lastname);
if (sp != null && !sp.IsChildAgent)
{
MainConsole.Instance.OutputFormat(
"Requesting rebake of uploaded textures for {0}",
sp.Name, scene.RegionInfo.RegionName);
scene.AvatarFactory.RequestRebake(sp, false);
}
}
}
}
} }
} }