summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rwxr-xr-xindra/newview/app_settings/settings.xml11
-rwxr-xr-xindra/newview/llagent.cpp14
-rwxr-xr-xindra/newview/llviewermenu.cpp2
-rwxr-xr-x[-rw-r--r--]indra/newview/llviewertexlayer.cpp2
-rwxr-xr-x[-rw-r--r--]indra/newview/llviewerwearable.cpp8
-rwxr-xr-xindra/newview/llviewerwindow.cpp2
-rwxr-xr-xindra/newview/llvoavatar.cpp121
-rwxr-xr-xindra/newview/llvoavatar.h17
-rwxr-xr-xindra/newview/llvoavatarself.cpp20
9 files changed, 128 insertions, 69 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 674685f3bc..13bf6c18f8 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1927,6 +1927,17 @@
<key>Value</key>
<string />
</map>
+ <key>DebugAvatarAppearanceMessage</key>
+ <map>
+ <key>Comment</key>
+ <string>Dump a bunch of XML files when handling appearance messages</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DebugAvatarRezTime</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 4e05836bca..bb9f8eaa26 100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -3630,7 +3630,7 @@ void LLAgent::processAgentCachedTextureResponse(LLMessageSystem *mesgsys, void *
return;
}
- if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures())
+ if (isAgentAvatarValid() && gAgentAvatarp->isEditingAppearance())
{
// ignore baked textures when in customize mode
return;
@@ -4260,9 +4260,16 @@ void LLAgent::requestLeaveGodMode()
//-----------------------------------------------------------------------------
void LLAgent::sendAgentSetAppearance()
{
+ // FIXME DRANO - this return short-circuits a bunch of phase stat tracking below.
if (!isAgentAvatarValid() || (getRegion() && getRegion()->getCentralBakeVersion())) return;
- if (gAgentQueryManager.mNumPendingQueries > 0 && (isAgentAvatarValid() && gAgentAvatarp->isUsingBakedTextures()))
+ // FIXME DRANO - problems around new-style appearance in an old-style region.
+ // - does this get called?
+ // - need to change mUseServerBakes->FALSE in that case
+ // - need to call processAvatarAppearance as if server had returned this result?
+ // gAgentAvatarp->mUseServerBakes = FALSE;
+
+ if (gAgentQueryManager.mNumPendingQueries > 0)
{
return;
}
@@ -4320,6 +4327,9 @@ void LLAgent::sendAgentSetAppearance()
}
// only update cache entries if we have all our baked textures
+ // FIXME DRANO additional if check for not in appearance editing
+ // mode, if still using local composites need to set using local
+ // composites to false, update mesh textures.
if (textures_current)
{
LL_INFOS("Avatar") << gAgentAvatarp->avString() << "TAT: Sending cached texture data" << LL_ENDL;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index cbd1ac692f..33add7d56c 100755
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -1600,7 +1600,7 @@ class LLAdvancedEnableAppearanceToXML : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- return gSavedSettings.getBOOL("DebugAvatarCompositeBaked");
+ return gSavedSettings.getBOOL("DebugAvatarAppearanceMessage");
}
};
diff --git a/indra/newview/llviewertexlayer.cpp b/indra/newview/llviewertexlayer.cpp
index f516562c2f..b129c28e0d 100644..100755
--- a/indra/newview/llviewertexlayer.cpp
+++ b/indra/newview/llviewertexlayer.cpp
@@ -285,7 +285,7 @@ BOOL LLViewerTexLayerSetBuffer::uploadInProgress() const
BOOL LLViewerTexLayerSetBuffer::isReadyToUpload() const
{
if (!gAgentQueryManager.hasNoPendingQueries()) return FALSE; // Can't upload if there are pending queries.
- if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures()) return FALSE; // Don't upload if avatar is using composites.
+ if (isAgentAvatarValid() && gAgentAvatarp->isEditingAppearance()) return FALSE; // Don't upload if avatar is being edited.
BOOL ready = FALSE;
if (getViewerTexLayerSet()->isLocalTextureDataFinal())
diff --git a/indra/newview/llviewerwearable.cpp b/indra/newview/llviewerwearable.cpp
index 41cef237ed..ce7c81ee6d 100644..100755
--- a/indra/newview/llviewerwearable.cpp
+++ b/indra/newview/llviewerwearable.cpp
@@ -38,6 +38,7 @@
#include "llavatarappearancedefines.h"
#include "llviewerwearable.h"
#include "llviewercontrol.h"
+#include "llviewerregion.h"
using namespace LLAvatarAppearanceDefines;
@@ -319,13 +320,12 @@ void LLViewerWearable::writeToAvatar(LLAvatarAppearance *avatarp)
if (!viewer_avatar->isValid()) return;
- // *TODO: Check with Vir on this:
-#if 0
- if (!viewer_avatar->isUsingLocalAppearance())
+ if (viewer_avatar->getRegion() &&
+ (viewer_avatar->getRegion()->getCentralBakeVersion()>0) &&
+ !viewer_avatar->isUsingLocalAppearance())
{
return;
}
-#endif
ESex old_sex = avatarp->getSex();
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 1780c2715a..63fe9312df 100755
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -4693,7 +4693,7 @@ void LLViewerWindow::restoreGL(const std::string& progress_message)
gResizeScreenTexture = TRUE;
gWindowResized = TRUE;
- if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures())
+ if (isAgentAvatarValid() && gAgentAvatarp->isEditingAppearance())
{
LLVisualParamHint::requestHintUpdates();
}
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 1b185ed508..fb06eb24c1 100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -48,6 +48,7 @@
#include "llcallingcard.h" // IDEVO for LLAvatarTracker
#include "lldrawpoolavatar.h"
#include "lldriverparam.h"
+#include "llpolyskeletaldistortion.h"
#include "lleditingmotion.h"
#include "llemote.h"
//#include "llfirstuse.h"
@@ -191,8 +192,7 @@ enum ERenderName
// Utility func - FIXME move out of avatar.
std::string get_sequential_numbered_file_name(const std::string& prefix,
- const std::string& suffix,
- const S32 width = 4);
+ const std::string& suffix);
//-----------------------------------------------------------------------------
// Callback data
@@ -626,7 +626,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
mLastRezzedStatus(-1),
mIsEditingAppearance(FALSE),
mUseLocalAppearance(FALSE),
- mUseServerBakes(TRUE)
+ mUseServerBakes(FALSE)
{
LLMemType mt(LLMemType::MTYPE_AVATAR);
//VTResume(); // VTune
@@ -2882,6 +2882,20 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
// clear debug text
mDebugText.clear();
+
+ if (gSavedSettings.getBOOL("DebugAvatarAppearanceMessage"))
+ {
+ S32 central_bake_version = -1;
+ if (getRegion())
+ {
+ central_bake_version = getRegion()->getCentralBakeVersion();
+ }
+ addDebugText(llformat("mUseLocalAppearance: %d,\nmIsEditingAppearance: %d\n"
+ "mUseServerBakes %d,\ncentralBakeVersion %d",
+ mUseLocalAppearance, mIsEditingAppearance,
+ mUseServerBakes, central_bake_version));
+ }
+
if (LLVOAvatar::sShowAnimationDebug)
{
for (LLMotionController::motion_list_t::iterator iter = mMotionController.getActiveMotions().begin();
@@ -4060,7 +4074,7 @@ void LLVOAvatar::updateTextures()
if (isIndexBakedTexture((ETextureIndex)texture_index)
&& imagep->getID() != IMG_DEFAULT_AVATAR
&& imagep->getID() != IMG_INVISIBLE
- && !mUseServerBakes
+ && !isUsingServerBakes()
&& !imagep->getTargetHost().isOk())
{
LL_WARNS_ONCE("Texture") << "LLVOAvatar::updateTextures No host for texture "
@@ -4203,8 +4217,15 @@ void LLVOAvatar::setTexEntry(const U8 index, const LLTextureEntry &te)
const std::string LLVOAvatar::getImageURL(const U8 te, const LLUUID &uuid)
{
std::string url = "";
- if (mUseServerBakes && !gSavedSettings.getString("AgentAppearanceServiceURL").empty())
+ if (isUsingServerBakes())
{
+ if (gSavedSettings.getString("AgentAppearanceServiceURL").empty())
+ {
+ // Probably a server-side issue if we get here:
+ llwarns << "AgentAppearanceServiceURL not set - Baked texture requests will fail" << llendl;
+ return url;
+ }
+
const LLAvatarAppearanceDictionary::TextureEntry* texture_entry = LLAvatarAppearanceDictionary::getInstance()->getTexture((ETextureIndex)te);
if (texture_entry != NULL)
{
@@ -5816,7 +5837,7 @@ void LLVOAvatar::updateMeshTextures()
for (U32 i=0; i < mBakedTextureDatas.size(); i++)
{
LLViewerTexLayerSet* layerset = getTexLayerSet(i);
- if (use_lkg_baked_layer[i] && !mUseLocalAppearance )
+ if (use_lkg_baked_layer[i] && !isUsingLocalAppearance() )
{
LLViewerFetchedTexture* baked_img;
const std::string url = getImageURL(i, mBakedTextureDatas[i].mLastTextureIndex);
@@ -5852,7 +5873,7 @@ void LLVOAvatar::updateMeshTextures()
}
}
}
- else if (!mUseLocalAppearance && is_layer_baked[i])
+ else if (!isUsingLocalAppearance() && is_layer_baked[i])
{
LLViewerFetchedTexture* baked_img = LLViewerTextureManager::staticCastToFetchedTexture(getImage( mBakedTextureDatas[i].mTextureIndex, 0 ), TRUE) ;
if( baked_img->getID() == mBakedTextureDatas[i].mLastTextureIndex )
@@ -5872,7 +5893,7 @@ void LLVOAvatar::updateMeshTextures()
src_callback_list, paused );
}
}
- else if (layerset && mUseLocalAppearance)
+ else if (layerset && isUsingLocalAppearance())
{
layerset->createComposite();
layerset->setUpdatesEnabled( TRUE );
@@ -5913,7 +5934,7 @@ void LLVOAvatar::updateMeshTextures()
// set texture and color of hair manually if we are not using a baked image.
// This can happen while loading hair for yourself, or for clients that did not
// bake a hair texture. Still needed for yourself after 1.22 is depricated.
- if (!is_layer_baked[BAKED_HAIR] || mIsEditingAppearance)
+ if (!is_layer_baked[BAKED_HAIR] || isEditingAppearance())
{
const LLColor4 color = mTexHairColor ? mTexHairColor->getColor() : LLColor4(1,1,1,1);
LLViewerTexture* hair_img = getImage( TEX_HAIR, 0 );
@@ -6277,6 +6298,24 @@ bool LLVOAvatar::visualParamWeightsAreDefault()
return rtn;
}
+void dump_visual_param(apr_file_t* file, LLVisualParam* viewer_param, F32 value)
+{
+ std::string type_string = "unknown";
+ if (dynamic_cast<LLTexLayerParamAlpha*>(viewer_param))
+ type_string = "param_alpha";
+ if (dynamic_cast<LLTexLayerParamColor*>(viewer_param))
+ type_string = "param_color";
+ if (dynamic_cast<LLDriverParam*>(viewer_param))
+ type_string = "param_driver";
+ if (dynamic_cast<LLPolyMorphTarget*>(viewer_param))
+ type_string = "param_morph";
+ if (dynamic_cast<LLPolySkeletalDistortion*>(viewer_param))
+ type_string = "param_skeleton";
+ apr_file_printf(file, "\t\t<param id=\"%d\" name=\"%s\" value=\"%.3f\"/ type=\"%s\">\n",
+ viewer_param->getID(), viewer_param->getName().c_str(), value, type_string.c_str());
+}
+
+
void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix,
const std::vector<F32>& params_for_dump,
const LLTEContents& tec)
@@ -6306,8 +6345,7 @@ void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix,
}
LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param;
F32 value = params_for_dump[i];
- apr_file_printf(file, "\t\t<param id=\"%d\" name=\"%s\" value=\"%.3f\"/>\n",
- viewer_param->getID(), viewer_param->getName().c_str(), value);
+ dump_visual_param(file, viewer_param, value);
param = getNextVisualParam();
}
for (U32 i = 0; i < tec.face_count; i++)
@@ -6323,14 +6361,14 @@ void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix,
//-----------------------------------------------------------------------------
void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
{
- //std::string dump_prefix = getFullname() + " ";
- //dumpArchetypeXML(dump_prefix + "process_start");
+ bool enable_verbose_dumps = gSavedSettings.getBOOL("DebugAvatarAppearanceMessage");
+ std::string dump_prefix = getFullname() + "_" + (isSelf()?"s":"o") + "_";
+ if (enable_verbose_dumps) { dumpArchetypeXML(dump_prefix + "process_start"); }
if (gSavedSettings.getBOOL("BlockAvatarAppearanceMessages"))
{
llwarns << "Blocking AvatarAppearance message" << llendl;
return;
}
-
LLMemType mt(LLMemType::MTYPE_AVATAR);
BOOL is_first_appearance_message = !mFirstAppearanceMessageReceived;
@@ -6340,25 +6378,10 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
<< " first? " << is_first_appearance_message << " self? " << isSelf() << LL_ENDL;
- if( isSelf() )
- {
- llwarns << avString() << "Received AvatarAppearance for self" << llendl;
- if( mFirstTEMessageReceived && !mUseServerBakes)
- {
-// llinfos << "processAvatarAppearance end " << mID << llendl;
- return;
- }
- }
- clearVisualParamWeights();
- //dumpArchetypeXML(dump_prefix + "process_post_clear");
-
ESex old_sex = getSex();
-// llinfos << "LLVOAvatar::processAvatarAppearance()" << llendl;
-// dumpAvatarTEs( "PRE processAvatarAppearance()" );
LLTEContents tec;
parseTEMessage(mesgsys, _PREHASH_ObjectData, -1, tec);
-// dumpAvatarTEs( "POST processAvatarAppearance()" );
U8 appearance_version = 0;
S32 this_update_cof_version = LLViewerInventoryCategory::VERSION_UNKNOWN;
@@ -6383,8 +6406,20 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
mUseServerBakes = false;
}
+ // Only now that we have result of appearance_version can we decide whether to bail out.
+ // Don't expect this case to occur.
+ if( isSelf() )
+ {
+ llwarns << avString() << "Received AvatarAppearance for self" << llendl;
+ if( mFirstTEMessageReceived && !isUsingServerBakes())
+ {
+ return;
+ }
+ }
+
+
// Check for stale update.
- if (mUseServerBakes && isSelf()
+ if (isUsingServerBakes() && isSelf()
&& this_update_cof_version >= LLViewerInventoryCategory::VERSION_INITIAL
&& this_update_cof_version < last_update_request_cof_version)
{
@@ -6470,12 +6505,11 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
}
param = getNextVisualParam();
}
- //dumpAppearanceMsgParams(dump_prefix + "appearance_msg",
- // params_for_dump,
- // tec);
+ if (enable_verbose_dumps)
+ dumpAppearanceMsgParams(dump_prefix + "appearance_msg", params_for_dump, tec);
}
- //dumpArchetypeXML(dump_prefix + "process_post_set_weights");
+ if (enable_verbose_dumps) { dumpArchetypeXML(dump_prefix + "process_post_set_weights"); }
const S32 expected_tweakable_count = getVisualParamCountInGroup(VISUAL_PARAM_GROUP_TWEAKABLE); // don't worry about VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT
if (num_blocks != expected_tweakable_count)
@@ -6541,7 +6575,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
updateMeshTextures();
- //dumpArchetypeXML(dump_prefix + "process_end");
+ if (enable_verbose_dumps) dumpArchetypeXML(dump_prefix + "process_end");
// llinfos << "processAvatarAppearance end " << mID << llendl;
}
@@ -6784,8 +6818,7 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )
}
std::string get_sequential_numbered_file_name(const std::string& prefix,
- const std::string& suffix,
- const S32 width)
+ const std::string& suffix)
{
typedef std::map<std::string,S32> file_num_type;
static file_num_type file_nums;
@@ -6795,10 +6828,8 @@ std::string get_sequential_numbered_file_name(const std::string& prefix,
{
num = it->second;
}
- std::ostringstream temp;
- temp << std::setw(width) << std::setfill('0') << num;
file_nums[prefix] = num+1;
- std::string outfilename = prefix + " " + temp.str() + ".xml";
+ std::string outfilename = prefix + " " + llformat("%04d",num) + ".xml";
std::replace(outfilename.begin(),outfilename.end(),' ','_');
return outfilename;
}
@@ -6808,7 +6839,7 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara
std::string outprefix(prefix);
if (outprefix.empty())
{
- outprefix = getFullname();
+ outprefix = getFullname() + (isSelf()?"_s":"_o");
}
if (outprefix.empty())
{
@@ -6846,8 +6877,7 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara
if( (viewer_param->getWearableType() == type) &&
(viewer_param->isTweakable() ) )
{
- apr_file_printf(file, "\t\t<param id=\"%d\" name=\"%s\" value=\"%.3f\"/>\n",
- viewer_param->getID(), viewer_param->getName().c_str(), viewer_param->getWeight());
+ dump_visual_param(file, viewer_param, viewer_param->getWeight());
}
}
@@ -6873,10 +6903,7 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara
for (LLVisualParam* param = getFirstVisualParam(); param; param = getNextVisualParam())
{
LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param;
- {
- apr_file_printf(file, "\t\t<param id=\"%d\" name=\"%s\" value=\"%.3f\"/>\n",
- viewer_param->getID(), viewer_param->getName().c_str(), viewer_param->getWeight());
- }
+ dump_visual_param(file, viewer_param, viewer_param->getWeight());
}
for (U8 te = 0; te < TEX_NUM_INDICES; te++)
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 96e87279b2..10c081cf68 100755
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -208,7 +208,6 @@ public:
public:
virtual bool isSelf() const { return false; } // True if this avatar is for this viewer's agent
- /*virtual*/BOOL isUsingBakedTextures() const { return mUseServerBakes; } // e.g. false if in appearance edit mode
private: //aligned members
LL_ALIGN_16(LLVector4a mImpostorExtents[2]);
@@ -636,7 +635,21 @@ public:
//--------------------------------------------------------------------
public:
BOOL getIsAppearanceAnimating() const { return mAppearanceAnimating; }
- BOOL isUsingLocalAppearance() const { return mUseLocalAppearance; }
+
+ // True if we are computing our appearance via local compositing
+ // instead of baked textures, as for example during wearable
+ // editing or when waiting for a subsequent server rebake.
+ /*virtual*/ BOOL isUsingLocalAppearance() const { return mUseLocalAppearance; }
+
+ // True if this avatar should fetch its baked textures via the new
+ // appearance mechanism.
+ /*virtual*/ BOOL isUsingServerBakes() const { return mUseServerBakes; }
+
+ // True if we are currently in appearance editing mode. Often but
+ // not always the same as isUsingLocalAppearance().
+ /*virtual*/ BOOL isEditingAppearance() const { return mIsEditingAppearance; }
+
+ // FIXME review isUsingLocalAppearance uses, some should be isEditing instead.
private:
BOOL mAppearanceAnimating;
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index c5bb4c3700..7ca40a8752 100755
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -746,7 +746,10 @@ U32 LLVOAvatarSelf::processUpdateMessage(LLMessageSystem *mesgsys,
{
U32 retval = LLVOAvatar::processUpdateMessage(mesgsys,user_data,block_num,update_type,dp);
- if (mInitialBakesLoaded == false && retval == 0x0)
+ // FIXME DRANO - skipping in the case of !mFirstAppearanceMessageReceived prevents us from trying to
+ // load textures before we know where they come from (ie, from baking service or not);
+ // unknown impact on performance.
+ if (mInitialBakesLoaded == false && retval == 0x0 && mFirstAppearanceMessageReceived)
{
// call update textures to force the images to be created
updateMeshTextures();
@@ -1274,11 +1277,8 @@ void LLVOAvatarSelf::localTextureLoaded(BOOL success, LLViewerFetchedTexture *sr
discard_level < local_tex_obj->getDiscard())
{
local_tex_obj->setDiscard(discard_level);
- if (isUsingBakedTextures())
- {
- requestLayerSetUpdate(index);
- }
- else
+ requestLayerSetUpdate(index);
+ if (isEditingAppearance())
{
LLVisualParamHint::requestHintUpdates();
}
@@ -1758,11 +1758,8 @@ void LLVOAvatarSelf::setLocalTexture(ETextureIndex type, LLViewerTexture* src_te
local_tex_obj->setDiscard(tex_discard);
if (isSelf())
{
- if (gAgentAvatarp->isUsingBakedTextures())
- {
- requestLayerSetUpdate(type);
- }
- else
+ requestLayerSetUpdate(type);
+ if (isEditingAppearance())
{
LLVisualParamHint::requestHintUpdates();
}
@@ -2669,6 +2666,7 @@ void LLVOAvatarSelf::onCustomizeEnd(bool disable_camera_switch)
gAgentAvatarp->mIsEditingAppearance = false;
if (gAgentAvatarp->getRegion() && !gAgentAvatarp->getRegion()->getCentralBakeVersion())
{
+ // FIXME DRANO - move to sendAgentSetAppearance, make conditional on upload complete.
gAgentAvatarp->mUseLocalAppearance = false;
}