diff options
Diffstat (limited to 'indra/newview/llfloateravatartextures.cpp')
-rw-r--r-- | indra/newview/llfloateravatartextures.cpp | 231 |
1 files changed, 113 insertions, 118 deletions
diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp index 3870448652..a6613968fb 100644 --- a/indra/newview/llfloateravatartextures.cpp +++ b/indra/newview/llfloateravatartextures.cpp @@ -2,91 +2,58 @@ * @file llfloateravatartextures.cpp * @brief Debugging view showing underlying avatar textures and baked textures. * - * $LicenseInfo:firstyear=2006&license=viewergpl$ - * - * Copyright (c) 2006-2007, Linden Research, Inc. - * + * $LicenseInfo:firstyear=2006&license=viewerlgpl$ * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ #include "llviewerprecompiledheaders.h" - #include "llfloateravatartextures.h" +#include "llagent.h" +#include "llagentwearables.h" #include "lltexturectrl.h" - #include "lluictrlfactory.h" #include "llviewerobjectlist.h" -#include "llvoavatar.h" +#include "llvoavatarself.h" -LLFloaterAvatarTextures::LLFloaterAvatarTextures(const LLUUID& id) : - LLFloater("avatar_texture_debug"), - mID(id) +using namespace LLVOAvatarDefines; + +LLFloaterAvatarTextures::LLFloaterAvatarTextures(const LLSD& id) + : LLFloater(id), + mID(id.asUUID()) { +// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_avatar_textures.xml"); } LLFloaterAvatarTextures::~LLFloaterAvatarTextures() { } -LLFloaterAvatarTextures* LLFloaterAvatarTextures::show(const LLUUID &id) -{ - - LLFloaterAvatarTextures* floaterp = new LLFloaterAvatarTextures(id); - - // Builds and adds to gFloaterView - LLUICtrlFactory::getInstance()->buildFloater(floaterp, "floater_avatar_textures.xml"); - - gFloaterView->addChild(floaterp); - floaterp->open(); /*Flawfinder: ignore*/ - - gFloaterView->adjustToFitScreen(floaterp, FALSE); - - return floaterp; -} - BOOL LLFloaterAvatarTextures::postBuild() { - mBakedHead = getChild<LLTextureCtrl>("baked_head"); - mBakedEyes = getChild<LLTextureCtrl>("baked_eyes"); - mBakedUpper = getChild<LLTextureCtrl>("baked_upper_body"); - mBakedLower = getChild<LLTextureCtrl>("baked_lower_body"); - mBakedSkirt = getChild<LLTextureCtrl>("baked_skirt"); - mHair = getChild<LLTextureCtrl>("hair"); - mMakeup = getChild<LLTextureCtrl>("head_bodypaint"); - mEye = getChild<LLTextureCtrl>("eye_texture"); - mShirt = getChild<LLTextureCtrl>("shirt"); - mUpperTattoo = getChild<LLTextureCtrl>("upper_bodypaint"); - mUpperJacket = getChild<LLTextureCtrl>("upper_jacket"); - mGloves = getChild<LLTextureCtrl>("gloves"); - mUndershirt = getChild<LLTextureCtrl>("undershirt"); - mPants = getChild<LLTextureCtrl>("pants"); - mLowerTattoo = getChild<LLTextureCtrl>("lower_bodypaint"); - mShoes = getChild<LLTextureCtrl>("shoes"); - mSocks = getChild<LLTextureCtrl>("socks"); - mJacket = getChild<LLTextureCtrl>("jacket"); - mUnderpants = getChild<LLTextureCtrl>("underpants"); - mSkirt = getChild<LLTextureCtrl>("skirt_texture"); + for (U32 i=0; i < TEX_NUM_INDICES; i++) + { + const std::string tex_name = LLVOAvatarDictionary::getInstance()->getTexture(ETextureIndex(i))->mName; + mTextures[i] = getChild<LLTextureCtrl>(tex_name); + } mTitle = getTitle(); childSetAction("Dump", onClickDump, this); @@ -101,21 +68,42 @@ void LLFloaterAvatarTextures::draw() LLFloater::draw(); } -#if !LL_RELEASE_FOR_DOWNLOAD static void update_texture_ctrl(LLVOAvatar* avatarp, LLTextureCtrl* ctrl, - LLVOAvatar::ETextureIndex te) + ETextureIndex te) { - LLUUID id = avatarp->getTE(te)->getID(); + LLUUID id = IMG_DEFAULT_AVATAR; + const LLVOAvatarDictionary::TextureEntry* tex_entry = LLVOAvatarDictionary::getInstance()->getTexture(te); + if (tex_entry->mIsLocalTexture) + { + if (avatarp->isSelf()) + { + const LLWearableType::EType wearable_type = tex_entry->mWearableType; + LLWearable *wearable = gAgentWearables.getWearable(wearable_type, 0); + if (wearable) + { + LLLocalTextureObject *lto = wearable->getLocalTextureObject(te); + if (lto) + { + id = lto->getID(); + } + } + } + } + else + { + id = avatarp->getTE(te)->getID(); + } + //id = avatarp->getTE(te)->getID(); if (id == IMG_DEFAULT_AVATAR) { ctrl->setImageAssetID(LLUUID::null); - ctrl->setToolTip(LLString("IMG_DEFAULT_AVATAR")); + ctrl->setToolTip(tex_entry->mName + " : " + std::string("IMG_DEFAULT_AVATAR")); } else { ctrl->setImageAssetID(id); - ctrl->setToolTip(id.asString()); + ctrl->setToolTip(tex_entry->mName + " : " + id.asString()); } } @@ -139,66 +127,73 @@ static LLVOAvatar* find_avatar(const LLUUID& id) void LLFloaterAvatarTextures::refresh() { - LLVOAvatar *avatarp = find_avatar(mID); - if (avatarp) + if (gAgent.isGodlike()) { - std::string fullname; - if (gCacheName->getFullName(avatarp->getID(), fullname)) + LLVOAvatar *avatarp = find_avatar(mID); + if (avatarp) { - setTitle(mTitle + ": " + fullname); + std::string fullname; + if (gCacheName->getFullName(avatarp->getID(), fullname)) + { + setTitle(mTitle + ": " + fullname); + } + for (U32 i=0; i < TEX_NUM_INDICES; i++) + { + update_texture_ctrl(avatarp, mTextures[i], ETextureIndex(i)); + } + } + else + { + setTitle(mTitle + ": " + getString("InvalidAvatar") + " (" + mID.asString() + ")"); } - update_texture_ctrl(avatarp, mBakedHead, LLVOAvatar::TEX_HEAD_BAKED); - update_texture_ctrl(avatarp, mBakedEyes, LLVOAvatar::TEX_EYES_BAKED); - update_texture_ctrl(avatarp, mBakedUpper, LLVOAvatar::TEX_UPPER_BAKED); - update_texture_ctrl(avatarp, mBakedLower, LLVOAvatar::TEX_LOWER_BAKED); - update_texture_ctrl(avatarp, mBakedSkirt, LLVOAvatar::TEX_SKIRT_BAKED); - - update_texture_ctrl(avatarp, mMakeup, LLVOAvatar::TEX_HEAD_BODYPAINT); - update_texture_ctrl(avatarp, mHair, LLVOAvatar::TEX_HAIR); - update_texture_ctrl(avatarp, mEye, LLVOAvatar::TEX_EYES_IRIS); - - update_texture_ctrl(avatarp, mShirt, LLVOAvatar::TEX_UPPER_SHIRT); - update_texture_ctrl(avatarp, mUpperTattoo, LLVOAvatar::TEX_UPPER_BODYPAINT); - update_texture_ctrl(avatarp, mUpperJacket, LLVOAvatar::TEX_UPPER_JACKET); - update_texture_ctrl(avatarp, mGloves, LLVOAvatar::TEX_UPPER_GLOVES); - update_texture_ctrl(avatarp, mUndershirt, LLVOAvatar::TEX_UPPER_UNDERSHIRT); - - update_texture_ctrl(avatarp, mPants, LLVOAvatar::TEX_LOWER_PANTS); - update_texture_ctrl(avatarp, mLowerTattoo, LLVOAvatar::TEX_LOWER_BODYPAINT); - update_texture_ctrl(avatarp, mShoes, LLVOAvatar::TEX_LOWER_SHOES); - update_texture_ctrl(avatarp, mSocks, LLVOAvatar::TEX_LOWER_SOCKS); - update_texture_ctrl(avatarp, mJacket, LLVOAvatar::TEX_LOWER_JACKET); - update_texture_ctrl(avatarp, mUnderpants, LLVOAvatar::TEX_LOWER_UNDERPANTS); - update_texture_ctrl(avatarp, mSkirt, LLVOAvatar::TEX_SKIRT); - } - else - { - setTitle(mTitle + ": INVALID AVATAR (" + mID.asString() + ")"); } } -#else - -void LLFloaterAvatarTextures::refresh() -{ -} - -#endif - // static void LLFloaterAvatarTextures::onClickDump(void* data) { -#if !LL_RELEASE_FOR_DOWNLOAD - LLFloaterAvatarTextures* self = (LLFloaterAvatarTextures*)data; - LLVOAvatar* avatarp = find_avatar(self->mID); - if (!avatarp) return; - - for (S32 i = 0; i < avatarp->getNumTEs(); i++) + if (gAgent.isGodlike()) { - const LLTextureEntry* te = avatarp->getTE(i); - if (!te) continue; - - llinfos << "Avatar TE " << i << " id " << te->getID() << llendl; + const LLVOAvatarSelf* avatarp = gAgentAvatarp; + if (!avatarp) return; + for (S32 i = 0; i < avatarp->getNumTEs(); i++) + { + const LLTextureEntry* te = avatarp->getTE(i); + if (!te) continue; + + const LLVOAvatarDictionary::TextureEntry* tex_entry = LLVOAvatarDictionary::getInstance()->getTexture((ETextureIndex)(i)); + if (!tex_entry) + continue; + + if (LLVOAvatar::isIndexLocalTexture((ETextureIndex)i)) + { + LLUUID id = IMG_DEFAULT_AVATAR; + LLWearableType::EType wearable_type = LLVOAvatarDictionary::getInstance()->getTEWearableType((ETextureIndex)i); + if (avatarp->isSelf()) + { + LLWearable *wearable = gAgentWearables.getWearable(wearable_type, 0); + if (wearable) + { + LLLocalTextureObject *lto = wearable->getLocalTextureObject(i); + if (lto) + { + id = lto->getID(); + } + } + } + if (id != IMG_DEFAULT_AVATAR) + { + llinfos << "TE " << i << " name:" << tex_entry->mName << " id:" << id << llendl; + } + else + { + llinfos << "TE " << i << " name:" << tex_entry->mName << " id:" << "<DEFAULT>" << llendl; + } + } + else + { + llinfos << "TE " << i << " name:" << tex_entry->mName << " id:" << te->getID() << llendl; + } + } } -#endif } |