diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llmath/llvolumemgr.cpp | 18 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.cpp | 20 | ||||
| -rw-r--r-- | indra/newview/llpaneleditsky.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llpaneleditsky.h | 2 | ||||
| -rw-r--r-- | indra/newview/llpanelface.cpp | 22 | ||||
| -rw-r--r-- | indra/newview/llselectmgr.cpp | 24 | ||||
| -rw-r--r-- | indra/newview/llselectmgr.h | 4 | ||||
| -rw-r--r-- | indra/newview/lltooldraganddrop.cpp | 16 | ||||
| -rw-r--r-- | indra/newview/llvocache.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/notifications.xml | 20 | 
10 files changed, 97 insertions, 40 deletions
| diff --git a/indra/llmath/llvolumemgr.cpp b/indra/llmath/llvolumemgr.cpp index 89cdb1c6b9..9399504529 100644 --- a/indra/llmath/llvolumemgr.cpp +++ b/indra/llmath/llvolumemgr.cpp @@ -89,7 +89,7 @@ BOOL LLVolumeMgr::cleanup()  // Note however that LLVolumeLODGroup that contains the volume  //  also holds a LLPointer so the volume will only go away after  //  anything holding the volume and the LODGroup are destroyed -LLVolume* LLVolumeMgr::refVolume(const LLVolumeParams &volume_params, const S32 detail) +LLVolume* LLVolumeMgr::refVolume(const LLVolumeParams &volume_params, const S32 lod)  {  	LLVolumeLODGroup* volgroupp;  	if (mDataMutex) @@ -109,7 +109,7 @@ LLVolume* LLVolumeMgr::refVolume(const LLVolumeParams &volume_params, const S32  	{  		mDataMutex->unlock();  	} -	return volgroupp->refLOD(detail); +	return volgroupp->refLOD(lod);  }  // virtual @@ -287,18 +287,18 @@ bool LLVolumeLODGroup::cleanupRefs()  	return res;  } -LLVolume* LLVolumeLODGroup::refLOD(const S32 detail) +LLVolume* LLVolumeLODGroup::refLOD(const S32 lod)  { -	llassert(detail >=0 && detail < NUM_LODS); -	mAccessCount[detail]++; +	llassert(lod >=0 && lod < NUM_LODS); +	mAccessCount[lod]++;  	mRefs++; -	if (mVolumeLODs[detail].isNull()) +	if (mVolumeLODs[lod].isNull())  	{ -		mVolumeLODs[detail] = new LLVolume(mVolumeParams, mDetailScales[detail]); +		mVolumeLODs[lod] = new LLVolume(mVolumeParams, mDetailScales[lod]);  	} -	mLODRefs[detail]++; -	return mVolumeLODs[detail]; +	mLODRefs[lod]++; +	return mVolumeLODs[lod];  }  BOOL LLVolumeLODGroup::derefLOD(LLVolume *volumep) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 57ac111fdf..2118ee74d3 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -3021,7 +3021,7 @@ S32 LLMeshRepository::getActualMeshLOD(LLMeshHeader& header, S32 lod)  	}  	//search up to find then ext available higher lod -	for (S32 i = lod+1; i < 4; ++i) +	for (S32 i = lod+1; i < LLVolumeLODGroup::NUM_LODS; ++i)  	{  		if (header.mLodSize[i] > 0)  		{ @@ -3183,7 +3183,7 @@ void LLMeshHeaderHandler::processFailure(LLCore::HttpStatus status)  	// Can't get the header so none of the LODs will be available  	LLMutexLock lock(gMeshRepo.mThread->mMutex); -	for (int i(0); i < 4; ++i) +	for (int i(0); i < LLVolumeLODGroup::NUM_LODS; ++i)  	{  		gMeshRepo.mThread->mUnavailableQ.push_back(LLMeshRepoThread::LODRequest(mMeshParams, i));  	} @@ -3212,7 +3212,7 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * /* body */, S32 /* b  		// Can't get the header so none of the LODs will be available  		LLMutexLock lock(gMeshRepo.mThread->mMutex); -		for (int i(0); i < 4; ++i) +		for (int i(0); i < LLVolumeLODGroup::NUM_LODS; ++i)  		{  			gMeshRepo.mThread->mUnavailableQ.push_back(LLMeshRepoThread::LODRequest(mMeshParams, i));  		} @@ -3293,7 +3293,7 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * /* body */, S32 /* b  			// headerReceived() parsed header, but header's data is invalid so none of the LODs will be available  			LLMutexLock lock(gMeshRepo.mThread->mMutex); -			for (int i(0); i < 4; ++i) +			for (int i(0); i < LLVolumeLODGroup::NUM_LODS; ++i)  			{  				gMeshRepo.mThread->mUnavailableQ.push_back(LLMeshRepoThread::LODRequest(mMeshParams, i));  			} @@ -3654,7 +3654,7 @@ S32 LLMeshRepository::loadMesh(LLVOVolume* vobj, const LLVolumeParams& mesh_para  	// Manage time-to-load metrics for mesh download operations.  	metricsProgress(1); -	if (detail < 0 || detail >= 4) +	if (detail < 0 || detail >= LLVolumeLODGroup::NUM_LODS)  	{  		return detail;  	} @@ -3717,7 +3717,7 @@ S32 LLMeshRepository::loadMesh(LLVOVolume* vobj, const LLVolumeParams& mesh_para  			}  			//no lower LOD is a available, is a higher lod available? -			for (S32 i = detail+1; i < 4; ++i) +			for (S32 i = detail+1; i < LLVolumeLODGroup::NUM_LODS; ++i)  			{  				LLVolume* lod = group->refLOD(i);  				if (lod && lod->isMeshAssetLoaded() && lod->getNumVolumeFaces() > 0) @@ -3918,7 +3918,7 @@ void LLMeshRepository::notifyLoadedMeshes()  				//create score map  				std::map<LLUUID, F32> score_map; -				for (U32 i = 0; i < 4; ++i) +				for (U32 i = 0; i < LLVolumeLODGroup::NUM_LODS; ++i)  				{  					for (mesh_load_map::iterator iter = mLoadingMeshes[i].begin();  iter != mLoadingMeshes[i].end(); ++iter)  					{ @@ -4099,7 +4099,7 @@ void LLMeshRepository::notifyMeshUnavailable(const LLVolumeParams& mesh_params,  	{  		F32 detail = LLVolumeLODGroup::getVolumeScaleFromDetail(lod); -        LLVolume* sys_volume = LLPrimitive::getVolumeManager()->refVolume(mesh_params, detail); +        LLVolume* sys_volume = LLPrimitive::getVolumeManager()->refVolume(mesh_params, lod);          if (sys_volume)          {              sys_volume->setMeshAssetUnavaliable(true); @@ -4480,7 +4480,7 @@ F32 LLMeshRepository::getStreamingCostLegacy(LLUUID mesh_id, F32 radius, S32* by              {                  LL_WARNS() << mesh_id << "bytes mismatch " << *bytes << " " << data.getSizeTotal() << LL_ENDL;              } -            if (bytes_visible && (lod >=0) && (lod < 4) && (*bytes_visible != data.getSizeByLOD(lod))) +            if (bytes_visible && (lod >=0) && (lod < LLVolumeLODGroup::NUM_LODS) && (*bytes_visible != data.getSizeByLOD(lod)))              {                  LL_WARNS() << mesh_id << "bytes_visible mismatch " << *bytes_visible << " " << data.getSizeByLOD(lod) << LL_ENDL;              } @@ -4640,7 +4640,7 @@ bool LLMeshCostData::init(const LLMeshHeader& header)      static LLCachedControl<U32> minimum_size(gSavedSettings, "MeshMinimumByteSize", 16); //make sure nothing is "free"      static LLCachedControl<U32> bytes_per_triangle(gSavedSettings, "MeshBytesPerTriangle", 16); -    for (S32 i=0; i<4; i++) +    for (S32 i=0; i<LLVolumeLODGroup::NUM_LODS; i++)      {          mEstTrisByLOD[i] = llmax((F32)mSizeByLOD[i] - (F32)metadata_discount, (F32)minimum_size) / (F32)bytes_per_triangle;      } diff --git a/indra/newview/llpaneleditsky.cpp b/indra/newview/llpaneleditsky.cpp index 761d856aae..0a7a4763be 100644 --- a/indra/newview/llpaneleditsky.cpp +++ b/indra/newview/llpaneleditsky.cpp @@ -217,7 +217,7 @@ void LLPanelSettingsSkyAtmosTab::refresh()      getChild<LLUICtrl>(FIELD_SKY_DENSITY_ICE_LEVEL)->setValue(ice_level);      getChild<LLUICtrl>(FIELD_REFLECTION_PROBE_AMBIANCE)->setValue(rp_ambiance); -    updateGammaLabel(); +    updateGammaLabel(should_auto_adjust);  }  //------------------------------------------------------------------------- @@ -335,10 +335,10 @@ void LLPanelSettingsSkyAtmosTab::onReflectionProbeAmbianceChanged()  } -void LLPanelSettingsSkyAtmosTab::updateGammaLabel() +void LLPanelSettingsSkyAtmosTab::updateGammaLabel(bool auto_adjust)  {      if (!mSkySettings) return; -    F32 ambiance = mSkySettings->getReflectionProbeAmbiance(); +    F32 ambiance = mSkySettings->getReflectionProbeAmbiance(auto_adjust);      if (ambiance != 0.f)      {          childSetValue("scene_gamma_label", getString("hdr_string")); diff --git a/indra/newview/llpaneleditsky.h b/indra/newview/llpaneleditsky.h index 33af667ab7..523cc134a8 100644 --- a/indra/newview/llpaneleditsky.h +++ b/indra/newview/llpaneleditsky.h @@ -80,7 +80,7 @@ private:      void                    onDropletRadiusChanged();      void                    onIceLevelChanged();      void                    onReflectionProbeAmbianceChanged(); -    void                    updateGammaLabel(); +    void                    updateGammaLabel(bool auto_adjust = false);  }; diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 7d6015f557..702a8a82e2 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -520,7 +520,11 @@ void LLPanelFace::sendTexture()  		{  			id = mTextureCtrl->getImageAssetID();  		} -		LLSelectMgr::getInstance()->selectionSetImage(id); +        if (!LLSelectMgr::getInstance()->selectionSetImage(id)) +        { +            // need to refresh value in texture ctrl +            refresh(); +        }  	}  } @@ -3032,7 +3036,11 @@ void LLPanelFace::onCommitPbr(const LLSD& data)          {              id = pbr_ctrl->getImageAssetID();          } -        LLSelectMgr::getInstance()->selectionSetGLTFMaterial(id); +        if (!LLSelectMgr::getInstance()->selectionSetGLTFMaterial(id)) +        { +            // If failed to set material, refresh pbr_ctrl's value +            refresh(); +        }      }  } @@ -3056,8 +3064,14 @@ void LLPanelFace::onSelectPbr(const LLSD& data)          {              id = pbr_ctrl->getImageAssetID();          } -        LLSelectMgr::getInstance()->selectionSetGLTFMaterial(id); -        LLSelectedTEMaterial::setMaterialID(this, id); +        if (LLSelectMgr::getInstance()->selectionSetGLTFMaterial(id)) +        { +            LLSelectedTEMaterial::setMaterialID(this, id); +        } +        else +        { +            refresh(); +        }      }  } diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index dca341e5a2..3b20ed1e00 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -1821,7 +1821,7 @@ void LLObjectSelection::applyNoCopyPbrMaterialToTEs(LLViewerInventoryItem* item)  // selectionSetImage()  //-----------------------------------------------------------------------------  // *TODO: re-arch texture applying out of lltooldraganddrop -void LLSelectMgr::selectionSetImage(const LLUUID& imageid) +bool LLSelectMgr::selectionSetImage(const LLUUID& imageid)  {  	// First for (no copy) textures and multiple object selection  	LLViewerInventoryItem* item = gInventory.getItem(imageid); @@ -1829,9 +1829,11 @@ void LLSelectMgr::selectionSetImage(const LLUUID& imageid)  		&& !item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID())  		&& (mSelectedObjects->getNumNodes() > 1) )  	{ -		LL_WARNS() << "Attempted to apply no-copy texture to multiple objects" -				<< LL_ENDL; -		return; +         LL_DEBUGS() << "Attempted to apply no-copy texture " << imageid +             << " to multiple objects" << LL_ENDL; + +        LLNotificationsUtil::add("FailedToApplyTextureNoCopyToMultiple"); +        return false;  	}  	struct f : public LLSelectedTEFunctor @@ -1896,12 +1898,14 @@ void LLSelectMgr::selectionSetImage(const LLUUID& imageid)  		}  	} sendfunc(item);  	getSelection()->applyToObjects(&sendfunc); + +    return true;  }  //-----------------------------------------------------------------------------  // selectionSetGLTFMaterial()  //----------------------------------------------------------------------------- -void LLSelectMgr::selectionSetGLTFMaterial(const LLUUID& mat_id) +bool LLSelectMgr::selectionSetGLTFMaterial(const LLUUID& mat_id)  {      // First for (no copy) textures and multiple object selection      LLViewerInventoryItem* item = gInventory.getItem(mat_id); @@ -1909,9 +1913,11 @@ void LLSelectMgr::selectionSetGLTFMaterial(const LLUUID& mat_id)          && !item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID())          && (mSelectedObjects->getNumNodes() > 1))      { -        LL_WARNS() << "Attempted to apply no-copy material to multiple objects" -            << LL_ENDL; -        return; +        LL_DEBUGS() << "Attempted to apply no-copy material " << mat_id +            << "to multiple objects" << LL_ENDL; + +        LLNotificationsUtil::add("FailedToApplyGLTFNoCopyToMultiple"); +        return false;      }      struct f : public LLSelectedTEFunctor @@ -1983,6 +1989,8 @@ void LLSelectMgr::selectionSetGLTFMaterial(const LLUUID& mat_id)      getSelection()->applyToObjects(&sendfunc);      LLGLTFMaterialList::flushUpdates(); + +    return true;  }  //----------------------------------------------------------------------------- diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index ca9a32f0db..327134a487 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -634,8 +634,8 @@ public:  	void selectionSetDensity(F32 density);  	void selectionSetRestitution(F32 restitution);  	void selectionSetMaterial(U8 material); -	void selectionSetImage(const LLUUID& imageid); // could be item or asset id -    void selectionSetGLTFMaterial(const LLUUID& mat_id); // could be item or asset id +	bool selectionSetImage(const LLUUID& imageid); // could be item or asset id +    bool selectionSetGLTFMaterial(const LLUUID& mat_id); // could be item or asset id  	void selectionSetColor(const LLColor4 &color);  	void selectionSetColorOnly(const LLColor4 &color); // Set only the RGB channels  	void selectionSetAlphaOnly(const F32 alpha); // Set only the alpha channel diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 6633951db3..4705970c7b 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -40,6 +40,7 @@  #include "llfloatertools.h"  #include "llgesturemgr.h"  #include "llgiveinventory.h" +#include "llgltfmateriallist.h"  #include "llhudmanager.h"  #include "llhudeffecttrail.h"  #include "llimview.h" @@ -1095,12 +1096,17 @@ void LLToolDragAndDrop::dropMaterialOneFace(LLViewerObject* hit_obj,          LL_WARNS() << "LLToolDragAndDrop::dropTextureOneFace no material item." << LL_ENDL;          return;      } -    LLUUID asset_id = item->getAssetUUID();      BOOL success = handleDropMaterialProtections(hit_obj, item, source, src_id);      if (!success)      {          return;      } +    LLUUID asset_id = item->getAssetUUID(); +    if (asset_id.isNull()) +    { +        // use blank material +        asset_id = LLGLTFMaterialList::BLANK_MATERIAL_ASSET_ID; +    }      hit_obj->setRenderMaterialID(hit_face, asset_id); @@ -1121,13 +1127,19 @@ void LLToolDragAndDrop::dropMaterialAllFaces(LLViewerObject* hit_obj,          LL_WARNS() << "LLToolDragAndDrop::dropTextureAllFaces no material item." << LL_ENDL;          return;      } -    LLUUID asset_id = item->getAssetUUID();      BOOL success = handleDropMaterialProtections(hit_obj, item, source, src_id);      if (!success)      {          return;      } +    LLUUID asset_id = item->getAssetUUID(); +    if (asset_id.isNull()) +    { +        // use blank material +        asset_id = LLGLTFMaterialList::BLANK_MATERIAL_ASSET_ID; +    } +      hit_obj->setRenderMaterialIDs(asset_id);      dialog_refresh_all();      // send the update to the simulator diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp index a4070a513c..a92057d010 100644 --- a/indra/newview/llvocache.cpp +++ b/indra/newview/llvocache.cpp @@ -1199,6 +1199,8 @@ void LLVOCache::initCache(ELLPath location, U32 size, U32 cache_version)  	readCacheHeader();	 +	LL_INFOS() << "Viewer Object Cache Versions - expected: " << cache_version << " found: " << mMetaInfo.mVersion <<  LL_ENDL; +  	if( mMetaInfo.mVersion != cache_version  		|| mMetaInfo.mAddressSize != expected_address)   	{ @@ -1209,7 +1211,8 @@ void LLVOCache::initCache(ELLPath location, U32 size, U32 cache_version)  			clearCacheInMemory();  		}  		else //delete the current cache if the format does not match. -		{			 +		{ +			LL_INFOS() << "Viewer Object Cache Versions unmatched.  clearing cache." <<  LL_ENDL;  			removeCache();  		}  	}	 diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index f77b235408..c4abd27a01 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -9213,6 +9213,26 @@ Paste failed. [REASON]    <notification     icon="alertmodal.tga" +   name="FailedToApplyTextureNoCopyToMultiple" +   type="alertmodal"> +Failed to apply texture. You can not apply a no-copy texture to multiple objects. +   <usetemplate +    name="okbutton" +    yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga" +   name="FailedToApplyGLTFNoCopyToMultiple" +   type="alertmodal"> +Failed to apply GLTF material. You can not apply a no-copy material to multiple objects. +   <usetemplate +    name="okbutton" +    yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="FacePasteTexturePermissions"     type="alertmodal">      You applied a texture with limited permissions, object will inherit permissions from texture. | 
