summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2013-01-30 18:23:31 -0500
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2013-01-30 18:23:31 -0500
commitc24c974cc6a7df3a1df7f7a24ad52275430b18dd (patch)
tree454409ec209f2685f859029ba88e6fdef3bb1064 /indra
parent3a7e3eacb86989c936cd6960cfa7434f3b8232fc (diff)
SH-3800 WIP - logic to detect baked textures being sought in the wrong place, avoid querying textures for which we have no authoritative data where they live
Diffstat (limited to 'indra')
-rwxr-xr-x[-rw-r--r--]indra/newview/llviewerobject.cpp27
-rwxr-xr-x[-rw-r--r--]indra/newview/llviewerobject.h3
-rwxr-xr-xindra/newview/llvoavatar.cpp59
-rwxr-xr-xindra/newview/llvoavatar.h1
-rwxr-xr-x[-rw-r--r--]indra/newview/llvoavatarself.cpp10
5 files changed, 55 insertions, 45 deletions
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 15560be9ba..c4b370a4b4 100644..100755
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -4034,32 +4034,15 @@ void LLViewerObject::setTEImage(const U8 te, LLViewerTexture *imagep)
}
}
-
-S32 LLViewerObject::setTETextureCore(const U8 te, const LLUUID& uuid, const std::string &url )
-{
- S32 retval = 0;
- if (uuid != getTE(te)->getID() ||
- uuid == LLUUID::null)
- {
- retval = LLPrimitive::setTETexture(te, uuid);
- mTEImages[te] = LLViewerTextureManager::getFetchedTextureFromUrl (url, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid);
- setChanged(TEXTURE);
- if (mDrawable.notNull())
- {
- gPipeline.markTextured(mDrawable);
- }
- }
- return retval;
-}
-
-S32 LLViewerObject::setTETextureCore(const U8 te, const LLUUID& uuid, LLHost host)
+S32 LLViewerObject::setTETextureCore(const U8 te, LLViewerTexture *image)
{
+ const LLUUID& uuid = image->getID();
S32 retval = 0;
if (uuid != getTE(te)->getID() ||
uuid == LLUUID::null)
{
retval = LLPrimitive::setTETexture(te, uuid);
- mTEImages[te] = LLViewerTextureManager::getFetchedTexture(uuid, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host);
+ mTEImages[te] = image;
setChanged(TEXTURE);
if (mDrawable.notNull())
{
@@ -4082,7 +4065,9 @@ void LLViewerObject::changeTEImage(S32 index, LLViewerTexture* new_image)
S32 LLViewerObject::setTETexture(const U8 te, const LLUUID& uuid)
{
// Invalid host == get from the agent's sim
- return setTETextureCore(te, uuid, LLHost::invalid);
+ LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(
+ uuid, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, LLHost::invalid);
+ return setTETextureCore(te,image);
}
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index 889025962c..728d279c39 100644..100755
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -301,8 +301,7 @@ public:
/*virtual*/ void setNumTEs(const U8 num_tes);
/*virtual*/ void setTE(const U8 te, const LLTextureEntry &texture_entry);
/*virtual*/ S32 setTETexture(const U8 te, const LLUUID &uuid);
- S32 setTETextureCore(const U8 te, const LLUUID& uuid, LLHost host);
- S32 setTETextureCore(const U8 te, const LLUUID& uuid, const std::string &url );
+ S32 setTETextureCore(const U8 te, LLViewerTexture *image);
/*virtual*/ S32 setTEColor(const U8 te, const LLColor3 &color);
/*virtual*/ S32 setTEColor(const U8 te, const LLColor4 &color);
/*virtual*/ S32 setTEScale(const U8 te, const F32 s, const F32 t);
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index c512837632..f0986ac223 100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -1776,29 +1776,42 @@ U32 LLVOAvatar::processUpdateMessage(LLMessageSystem *mesgsys,
return retval;
}
+LLViewerFetchedTexture *LLVOAvatar::getBakedTextureImage(const U8 te, const LLUUID& uuid)
+{
+ LLViewerFetchedTexture *result;
+
+ const std::string url = getImageURL(te,uuid);
+ if (!url.empty())
+ {
+ llinfos << "texture URL " << url << llendl;
+ result = LLViewerTextureManager::getFetchedTextureFromUrl(
+ url, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid);
+ }
+ else
+ {
+ llinfos << "get texture from host " << uuid << llendl;
+ LLHost host = getObjectHost();
+ result = LLViewerTextureManager::getFetchedTexture(
+ uuid, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host);
+ }
+ return result;
+}
+
// virtual
S32 LLVOAvatar::setTETexture(const U8 te, const LLUUID& uuid)
{
- // The core setTETexture() method requests images, so we need
- // to redirect certain avatar texture requests to different sims.
- if (isIndexBakedTexture((ETextureIndex)te))
+ if (!isIndexBakedTexture((ETextureIndex)te))
{
- const std::string url = getImageURL(te,uuid);
- if (!url.empty())
+ if (!uuid.isNull())
{
- llinfos << "texture URL " << url << llendl;
- return setTETextureCore(te, uuid, url);
+ llinfos << "ignoring texture " << uuid << " in non-baked slot " << (S32)te << " - will use null " << llendl;
}
-
- llinfos << "get texture from host " << uuid << llendl;
- LLHost target_host = getObjectHost();
- return setTETextureCore(te, uuid, target_host);
- }
- else
- {
- llinfos << "ignoring texture in non-baked slot " << uuid << " - will use null " << LLUUID::null << llendl;
- return setTETextureCore(te, LLUUID::null, LLHost::invalid);
+ return LLViewerObject::setTETexture(te, LLUUID::null);
}
+
+ LLViewerFetchedTexture *image = getBakedTextureImage(te,uuid);
+ llassert(image);
+ return setTETextureCore(te, image);
}
static LLFastTimer::DeclareTimer FTM_AVATAR_UPDATE("Avatar Update");
@@ -6070,6 +6083,8 @@ void LLVOAvatar::updateMeshTextures()
last_id_string = "A";
else if (mBakedTextureDatas[i].mLastTextureID == IMG_DEFAULT)
last_id_string = "D";
+ else if (mBakedTextureDatas[i].mLastTextureID == IMG_INVISIBLE)
+ last_id_string = "I";
else
last_id_string = "*";
bool is_ltda = layerset
@@ -6750,12 +6765,6 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
return;
}
- BOOL is_first_appearance_message = !mFirstAppearanceMessageReceived;
- mFirstAppearanceMessageReceived = TRUE;
-
- LL_INFOS("Avatar") << avString() << "processAvatarAppearance start " << mID
- << " first? " << is_first_appearance_message << " self? " << isSelf() << LL_ENDL;
-
ESex old_sex = getSex();
@@ -6831,6 +6840,12 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
// runway - was
// if (!is_first_appearance_message )
// which means it would be called on second appearance message - probably wrong.
+ BOOL is_first_appearance_message = !mFirstAppearanceMessageReceived;
+ mFirstAppearanceMessageReceived = TRUE;
+
+ LL_INFOS("Avatar") << avString() << "processAvatarAppearance start " << mID
+ << " first? " << is_first_appearance_message << " self? " << isSelf() << LL_ENDL;
+
if (is_first_appearance_message )
{
onFirstTEMessageReceived();
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index bdb477590f..c14f18d00e 100755
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -147,6 +147,7 @@ public:
void collectTextureUUIDs(std::set<LLUUID>& ids);
void releaseOldTextures();
/*virtual*/ void updateTextures();
+ LLViewerFetchedTexture* getBakedTextureImage(const U8 te, const LLUUID& uuid);
/*virtual*/ S32 setTETexture(const U8 te, const LLUUID& uuid); // If setting a baked texture, need to request it from a non-local sim.
/*virtual*/ void onShift(const LLVector4a& shift_vector);
/*virtual*/ U32 getPartitionType() const;
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 757d029513..aeac478d4e 100644..100755
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -759,6 +759,15 @@ U32 LLVOAvatarSelf::processUpdateMessage(LLMessageSystem *mesgsys,
{
U32 retval = LLVOAvatar::processUpdateMessage(mesgsys,user_data,block_num,update_type,dp);
+#if 0
+ // DRANO - it's not clear this does anything useful. If we wait
+ // until an appearance message has been received, we already have
+ // the texture ids. If we don't wait, we don't yet know where to
+ // look for baked textures, because we haven't received the
+ // appearance version data from the appearance message. This looks
+ // like an old optimization that's incompatible with server-side
+ // texture baking.
+
// 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.
@@ -783,6 +792,7 @@ U32 LLVOAvatarSelf::processUpdateMessage(LLMessageSystem *mesgsys,
mInitialBakesLoaded = true;
}
+#endif
return retval;
}