diff options
| -rw-r--r-- | indra/llui/llaccordionctrl.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/featuretable.txt | 7 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.cpp | 42 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 111 | ||||
| -rw-r--r-- | indra/newview/llinventorymodel.cpp | 22 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.cpp | 13 | ||||
| -rw-r--r-- | indra/newview/llvotree.cpp | 3 | ||||
| -rw-r--r-- | indra/newview/pipeline.cpp | 15 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_outfits_list.xml | 4 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/strings.xml | 5 | 
10 files changed, 118 insertions, 109 deletions
diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp index 673631f99a..28125ccaaf 100644 --- a/indra/llui/llaccordionctrl.cpp +++ b/indra/llui/llaccordionctrl.cpp @@ -40,6 +40,8 @@  #include "llfocusmgr.h"  #include "lllocalcliprect.h" +#include "lltrans.h" +  #include "boost/bind.hpp"  static const S32 DRAGGER_BAR_MARGIN = 4; @@ -72,6 +74,7 @@ LLAccordionCtrl::LLAccordionCtrl(const Params& params):LLPanel(params)  {  	initNoTabsWidget(params.no_matched_tabs_text); +	mNoVisibleTabsOrigString = LLTrans::getString(params.no_visible_tabs_text.initial_value().asString());  	mSingleExpansion = params.single_expansion;  	if(mFitParent && !mSingleExpansion)  	{ @@ -386,7 +389,7 @@ void	LLAccordionCtrl::initNoTabsWidget(const LLTextBox::Params& tb_params)  {  	LLTextBox::Params tp = tb_params;  	tp.rect(getLocalRect()); -	mNoMatchedTabsOrigString = tp.initial_value().asString(); +	mNoMatchedTabsOrigString = LLTrans::getString(tp.initial_value().asString());  	mNoVisibleTabsHelpText = LLUICtrlFactory::create<LLTextBox>(tp, this);  } diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 1c763453dc..ccdb109d95 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -1,4 +1,4 @@ -version 21 +version 22  // NOTE: This is mostly identical to featuretable_mac.txt with a few differences  // Should be combined into one table @@ -59,6 +59,7 @@ RenderTextureMemoryMultiple		1	1.0  RenderShaderLightingMaxLevel	1	3  SkyUseClassicClouds			1	1  WatchdogDisabled				1	1 +RenderUseStreamVBO			1	1  // @@ -431,6 +432,10 @@ list ATIOldDriver  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 +// ATI cards generally perform better when not using VBOs for streaming data + +list ATI +RenderUseStreamVBO			1	0  /// Tweaked NVIDIA diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 2c097bdbb1..862c68ecda 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -403,7 +403,10 @@ void LLWearableHoldingPattern::checkMissingWearables()  	for (S32 type = 0; type < LLWearableType::WT_COUNT; ++type)  	{ -		llinfos << "type " << type << " requested " << requested_by_type[type] << " found " << found_by_type[type] << llendl; +		if (requested_by_type[type] > found_by_type[type]) +		{ +			llwarns << "got fewer wearables than requested, type " << type << ": requested " << requested_by_type[type] << ", found " << found_by_type[type] << llendl; +		}  		if (found_by_type[type] > 0)  			continue;  		if ( @@ -670,12 +673,15 @@ bool LLWearableHoldingPattern::pollMissingWearables()  	bool timed_out = isTimedOut();  	bool missing_completed = isMissingCompleted();  	bool done = timed_out || missing_completed; -	 -	llinfos << "polling missing wearables, waiting for items " << mTypesToRecover.size() -			<< " links " << mTypesToLink.size() -			<< " wearables, timed out " << timed_out -			<< " elapsed " << mWaitTime.getElapsedTimeF32() -			<< " done " << done << llendl; + +	if (!done) +	{ +		llinfos << "polling missing wearables, waiting for items " << mTypesToRecover.size() +				<< " links " << mTypesToLink.size() +				<< " wearables, timed out " << timed_out +				<< " elapsed " << mWaitTime.getElapsedTimeF32() +				<< " done " << done << llendl; +	}  	if (done)  	{ @@ -795,12 +801,8 @@ void LLWearableHoldingPattern::onWearableAssetFetch(LLWearable *wearable)  	}  	mResolved += 1;  // just counting callbacks, not successes. -	llinfos << "onWearableAssetFetch, resolved count " << mResolved << " of requested " << getFoundList().size() << llendl; -	if (wearable) -	{ -		llinfos << "wearable found, type " << wearable->getType() << " asset " << wearable->getAssetID() << llendl; -	} -	else +	llinfos << "resolved " << mResolved << "/" << getFoundList().size() << llendl; +	if (!wearable)  	{  		llwarns << "no wearable found" << llendl;  	} @@ -830,10 +832,14 @@ void LLWearableHoldingPattern::onWearableAssetFetch(LLWearable *wearable)  		LLFoundData& data = *iter;  		if(wearable->getAssetID() == data.mAssetID)  		{ -			data.mWearable = wearable;  			// Failing this means inventory or asset server are corrupted in a way we don't handle. -			llassert((data.mWearableType < LLWearableType::WT_COUNT) && (wearable->getType() == data.mWearableType)); -			break; +			if ((data.mWearableType >= LLWearableType::WT_COUNT) || (wearable->getType() != data.mWearableType)) +			{ +				llwarns << "recovered wearable but type invalid. inventory wearable type: " << data.mWearableType << " asset wearable type: " << wearable->getType() << llendl; +				break; +			} + +			data.mWearable = wearable;  		}  	}  } @@ -1635,7 +1641,7 @@ void LLAppearanceMgr::updateAppearanceFromCOF(bool update_base_outfit_ordering)  	// the saved outfit stored as a folder link  	updateIsDirty(); -	dumpCat(getCOF(),"COF, start"); +	//dumpCat(getCOF(),"COF, start");  	bool follow_folder_links = true;  	LLUUID current_outfit_id = getCOF(); @@ -1718,7 +1724,7 @@ void LLAppearanceMgr::updateAppearanceFromCOF(bool update_base_outfit_ordering)  	{  		LLFoundData& found = *it; -		llinfos << "waiting for onWearableAssetFetch callback, asset " << found.mAssetID.asString() << llendl; +		lldebugs << "waiting for onWearableAssetFetch callback, asset " << found.mAssetID.asString() << llendl;  		// Fetch the wearables about to be worn.  		LLWearableList::instance().getAsset(found.mAssetID, diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 3350497326..9e7224d9b8 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1619,85 +1619,71 @@ BOOL LLFolderBridge::isClipboardPasteableAsLink() const  BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  											BOOL drop)  { -	// This should never happen, but if an inventory item is incorrectly parented, -	// the UI will get confused and pass in a NULL. -	if(!inv_cat) return FALSE;  	LLInventoryModel* model = getInventoryModel(); -	if(!model) return FALSE; +	if (!inv_cat) return FALSE; // shouldn't happen, but in case item is incorrectly parented in which case inv_cat will be NULL +	if (!model) return FALSE;  	if (!isAgentAvatarValid()) return FALSE; +	if (!isAgentInventory()) return FALSE; // cannot drag categories into library -	// cannot drag categories into library -	if(!isAgentInventory()) -	{ -		return FALSE; -	}  	// check to make sure source is agent inventory, and is represented there.  	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource(); -	BOOL is_agent_inventory = (model->getCategory(inv_cat->getUUID()) != NULL) +	const BOOL is_agent_inventory = (model->getCategory(inv_cat->getUUID()) != NULL)  		&& (LLToolDragAndDrop::SOURCE_AGENT == source);  	BOOL accept = FALSE; -	S32 i; -	LLInventoryModel::cat_array_t	descendent_categories; -	LLInventoryModel::item_array_t	descendent_items; -	if(is_agent_inventory) +	if (is_agent_inventory)  	{ -		const LLUUID& cat_id = inv_cat->getUUID(); +		const LLUUID &cat_id = inv_cat->getUUID(); +		const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false); +		const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false); +		 +		const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id); +		const BOOL move_is_into_outfit = getCategory() && (getCategory()->getPreferredType() == LLFolderType::FT_OUTFIT); +		const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); -		// Is the destination the trash? -		const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); -		BOOL move_is_into_trash = (mUUID == trash_id) -			|| model->isObjectDescendentOf(mUUID, trash_id); -		BOOL is_movable = (!LLFolderType::lookupIsProtectedType(inv_cat->getPreferredType())); -		const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); -		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); -		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); -		if (move_is_into_current_outfit || move_is_into_outfit) -		{ -			// BAP - restrictions? -			is_movable = true; -		} +		//-------------------------------------------------------------------------------- +		// Determine if folder can be moved. +		// +		BOOL is_movable = TRUE; +		if (LLFolderType::lookupIsProtectedType(inv_cat->getPreferredType())) +			is_movable = FALSE; +		if (move_is_into_outfit) +			is_movable = FALSE;  		if (mUUID == gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE)) +			is_movable = FALSE; +		LLInventoryModel::cat_array_t descendent_categories; +		LLInventoryModel::item_array_t descendent_items; +		gInventory.collectDescendents(cat_id, descendent_categories, descendent_items, FALSE); +		for (S32 i=0; i < descendent_categories.count(); ++i)  		{ -			is_movable = FALSE; // It's generally movable but not into Favorites folder. EXT-1604 +			LLInventoryCategory* category = descendent_categories[i]; +			if(LLFolderType::lookupIsProtectedType(category->getPreferredType())) +			{ +				// Can't move "special folders" (e.g. Textures Folder). +				is_movable = FALSE; +				break; +			}  		} - -		if( is_movable ) +		if (move_is_into_trash)  		{ -			gInventory.collectDescendents( cat_id, descendent_categories, descendent_items, FALSE ); - -			for( i = 0; i < descendent_categories.count(); i++ ) +			for (S32 i=0; i < descendent_items.count(); ++i)  			{ -				LLInventoryCategory* category = descendent_categories[i]; -				if(LLFolderType::lookupIsProtectedType(category->getPreferredType())) +				LLInventoryItem* item = descendent_items[i]; +				if (get_is_item_worn(item->getUUID()))  				{ -					// ...can't move "special folders" like Textures  					is_movable = FALSE; -					break; -				} -			} - -			if( is_movable ) -			{ -				if( move_is_into_trash ) -				{ -					for( i = 0; i < descendent_items.count(); i++ ) -					{ -						LLInventoryItem* item = descendent_items[i]; -						if (get_is_item_worn(item->getUUID())) -						{ -							is_movable = FALSE; -							break; // It's generally movable, but not into the trash! -						} -					} +					break; // It's generally movable, but not into the trash.  				}  			}  		} +		//  +		//-------------------------------------------------------------------------------- +  		accept = is_movable  			&& (mUUID != cat_id)								// Can't move a folder into itself  			&& (mUUID != inv_cat->getParentUUID())				// Avoid moves that would change nothing @@ -1707,7 +1693,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  			// Look for any gestures and deactivate them  			if (move_is_into_trash)  			{ -				for (i = 0; i < descendent_items.count(); i++) +				for (S32 i=0; i < descendent_items.count(); i++)  				{  					LLInventoryItem* item = descendent_items[i];  					if (item->getType() == LLAssetType::AT_GESTURE @@ -2855,14 +2841,9 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  										BOOL drop)  {  	LLInventoryModel* model = getInventoryModel(); -	if(!model || !inv_item) return FALSE; - -	// cannot drag into library -	if(!isAgentInventory()) -	{ -		return FALSE; -	} +	if(!model || !inv_item) return FALSE; +	if(!isAgentInventory()) return FALSE; // cannot drag into library  	if (!isAgentAvatarValid()) return FALSE;  	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource(); @@ -2870,9 +2851,9 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  	LLViewerObject* object = NULL;  	if(LLToolDragAndDrop::SOURCE_AGENT == source)  	{ -		const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); -		const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); -		const LLUUID& favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE); +		const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false); +		const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false); +		const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);  		const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);  		const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index b9e9f0fc0b..236ed9bbd1 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -1660,6 +1660,17 @@ bool LLInventoryModel::loadSkeleton(  			}  		} +		// Invalidate all categories that failed fetching descendents for whatever +		// reason (e.g. one of the descendents was a broken link). +		for (cat_set_t::iterator invalid_cat_it = invalid_categories.begin(); +			 invalid_cat_it != invalid_categories.end(); +			 invalid_cat_it++) +		{ +			LLViewerInventoryCategory* cat = (*invalid_cat_it).get(); +			cat->setVersion(NO_VERSION); +			llinfos << "Invalidating category name: " << cat->getName() << " UUID: " << cat->getUUID() << " due to invalid descendents cache" << llendl; +		} +  		// At this point, we need to set the known descendents for each  		// category which successfully cached so that we do not  		// needlessly fetch descendents for categories which we have. @@ -1682,17 +1693,6 @@ bool LLInventoryModel::loadSkeleton(  			}  		} -		// Invalidate all categories that failed fetching descendents for whatever -		// reason (e.g. one of the descendents was a broken link). -		for (cat_set_t::iterator invalid_cat_it = invalid_categories.begin(); -			 invalid_cat_it != invalid_categories.end(); -			 invalid_cat_it++) -		{ -			LLViewerInventoryCategory* cat = (*invalid_cat_it).get(); -			cat->setVersion(NO_VERSION); -			llinfos << "Invalidating category name: " << cat->getName() << " UUID: " << cat->getUUID() << " due to invalid descendents cache" << llendl; -		} -  		if(remove_inventory_file)  		{  			// clean up the gunzipped file. diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 9a2866832a..6d93de2383 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -765,12 +765,19 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  	{  		LLViewerRegion* regionp = LLWorld::getInstance()->getRegionFromHandle(region_handle); -		if(regionp != mRegionp && regionp && mRegionp) +		if(regionp != mRegionp && regionp && mRegionp)//region cross  		{ +			//this is the redundant position and region update, but it is necessary in case the viewer misses the following  +			//position and region update messages from sim. +			//this redundant update should not cause any problems.  			LLVector3 delta_pos =  mRegionp->getOriginAgent() - regionp->getOriginAgent(); -			setPosition(getPosition() + delta_pos) ; //update the region position immediately.		 +			setPositionParent(getPosition() + delta_pos); //update to the new region position immediately. +			setRegion(regionp) ; //change the region. +		} +		else +		{ +			mRegionp = regionp ;  		} -		mRegionp = regionp ;  	}	  	if (!mRegionp) diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index eb5b6c6618..5431aec07c 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -313,7 +313,10 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys,  	//  	//  Load Species-Specific data   	// +	static const S32 MAX_TREE_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL = 32 ; //frames.  	mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); +	mTreeImagep->setMaxVirtualSizeResetInterval(MAX_TREE_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL); //allow to wait for at most 16 frames to reset virtual size. +  	mBranchLength = sSpeciesTable[mSpecies]->mBranchLength;  	mTrunkLength = sSpeciesTable[mSpecies]->mTrunkLength;  	mLeafScale = sSpeciesTable[mSpecies]->mLeafScale; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 3716a5e9d9..486cafc999 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -2253,7 +2253,6 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result)  			}  		}  	} -	llpushcallstacks ;  	{  		LLFastTimer ftm(FTM_STATESORT_DRAWABLE);  		for (LLCullResult::drawable_list_t::iterator iter = sCull->beginVisibleList(); @@ -2266,15 +2265,12 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result)  			}  		}  	} -	llpushcallstacks ;	  	{  		LLFastTimer ftm(FTM_CLIENT_COPY);  		LLVertexBuffer::clientCopy();  	} -	llpushcallstacks ; -	postSort(camera); -	llpushcallstacks ; +	postSort(camera);	  }  void LLPipeline::stateSort(LLSpatialGroup* group, LLCamera& camera) @@ -2544,6 +2540,7 @@ void LLPipeline::postSort(LLCamera& camera)  	assertInitialized(); +	llpushcallstacks ;  	//rebuild drawable geometry  	for (LLCullResult::sg_list_t::iterator i = sCull->beginDrawableGroups(); i != sCull->endDrawableGroups(); ++i)  	{ @@ -2554,7 +2551,7 @@ void LLPipeline::postSort(LLCamera& camera)  			group->rebuildGeom();  		}  	} - +	llpushcallstacks ;  	//rebuild groups  	sCull->assertDrawMapsEmpty(); @@ -2574,6 +2571,7 @@ void LLPipeline::postSort(LLCamera& camera)  	rebuildPriorityGroups(); +	llpushcallstacks ;  	const S32 bin_count = 1024*8; @@ -2675,7 +2673,7 @@ void LLPipeline::postSort(LLCamera& camera)  		std::sort(sCull->beginAlphaGroups(), sCull->endAlphaGroups(), LLSpatialGroup::CompareDepthGreater());  	} -	 +	llpushcallstacks ;  	// only render if the flag is set. The flag is only set if we are in edit mode or the toggle is set in the menus  	if (LLFloaterReg::instanceVisible("beacons") && !sShadowRender)  	{ @@ -2723,7 +2721,7 @@ void LLPipeline::postSort(LLCamera& camera)  			forAllVisibleDrawables(renderSoundHighlights);  		}  	} - +	llpushcallstacks ;  	// If managing your telehub, draw beacons at telehub and currently selected spawnpoint.  	if (LLFloaterTelehub::renderBeacons())  	{ @@ -2753,6 +2751,7 @@ void LLPipeline::postSort(LLCamera& camera)  	}  	//LLSpatialGroup::sNoDelete = FALSE; +	llpushcallstacks ;  } diff --git a/indra/newview/skins/default/xui/en/panel_outfits_list.xml b/indra/newview/skins/default/xui/en/panel_outfits_list.xml index 27e23440df..b43aa0a824 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_list.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_list.xml @@ -14,9 +14,9 @@       background_visible="true"       bg_alpha_color="DkGray2"       bg_opaque_color="DkGray2" -     no_matched_tabs_text.value="Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]." +     no_matched_tabs_text.value="NoOutfitsTabsMatched"       no_matched_tabs_text.v_pad="10" -     no_visible_tabs_text.value="..." +     no_visible_tabs_text.value="NoOutfits"       follows="all"       height="400"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 1e8d0d2fe5..e43c61b202 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2172,12 +2172,17 @@ Clears (deletes) the media and all params from the given face.  	<string name="PanelDirEventsDateText">[mthnum,datetime,slt]/[day,datetime,slt]</string>  	<!-- panel contents --> +	<string name="PanelContentsTooltip">Content of object</string>  	<string name="PanelContentsNewScript">New Script</string>  	<string name="PanelContentsTooltip">Content of object</string>    <!-- panel preferences general -->    <string name="BusyModeResponseDefault">The Resident you messaged is in 'busy mode' which means they have requested not to be disturbed.  Your message will still be shown in their IM panel for later viewing.</string> +	<!-- Outfits Panel --> +	<string name="NoOutfits">You don't have any outfits yet. Try [secondlife:///app/search/all/ Search]</string> +	<string name="NoOutfitsTabsMatched">Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search].</string> +  	<!-- Mute -->  	<string name="MuteByName">(By name)</string>  	<string name="MuteAgent">(Resident)</string>  | 
