diff options
| -rw-r--r-- | indra/llmessage/message_prehash.cpp | 1 | ||||
| -rw-r--r-- | indra/llmessage/message_prehash.h | 1 | ||||
| -rw-r--r-- | indra/newview/llfloaterregioninfo.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llfloatertools.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/llmanipscale.cpp | 5 | ||||
| -rwxr-xr-x | indra/newview/llmeshrepository.cpp | 31 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.h | 4 | ||||
| -rw-r--r-- | indra/newview/llpanelvolume.cpp | 14 | ||||
| -rw-r--r-- | indra/newview/llviewermenufile.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llviewerregion.cpp | 58 | ||||
| -rw-r--r-- | indra/newview/llviewerregion.h | 4 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.cpp | 2 | 
12 files changed, 118 insertions, 19 deletions
| diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp index 5d03615e53..6133f50637 100644 --- a/indra/llmessage/message_prehash.cpp +++ b/indra/llmessage/message_prehash.cpp @@ -742,6 +742,7 @@ char const* const _PREHASH_MoneyData = LLMessageStringTable::getInstance()->getS  char const* const _PREHASH_ObjectDeselect = LLMessageStringTable::getInstance()->getString("ObjectDeselect");  char const* const _PREHASH_NewAssetID = LLMessageStringTable::getInstance()->getString("NewAssetID");  char const* const _PREHASH_ObjectAdd = LLMessageStringTable::getInstance()->getString("ObjectAdd"); +char const* const _PREHASH_SimulatorFeatures = LLMessageStringTable::getInstance()->getString("SimulatorFeatures");  char const* const _PREHASH_RayEndIsIntersection = LLMessageStringTable::getInstance()->getString("RayEndIsIntersection");  char const* const _PREHASH_CompleteAuction = LLMessageStringTable::getInstance()->getString("CompleteAuction");  char const* const _PREHASH_CircuitCode = LLMessageStringTable::getInstance()->getString("CircuitCode"); diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h index 8dc86601e6..f94ee1ed22 100644 --- a/indra/llmessage/message_prehash.h +++ b/indra/llmessage/message_prehash.h @@ -742,6 +742,7 @@ extern char const* const _PREHASH_MoneyData;  extern char const* const _PREHASH_ObjectDeselect;  extern char const* const _PREHASH_NewAssetID;  extern char const* const _PREHASH_ObjectAdd; +extern char const* const _PREHASH_SimulatorFeatures;  extern char const* const _PREHASH_RayEndIsIntersection;  extern char const* const _PREHASH_CompleteAuction;  extern char const* const _PREHASH_CircuitCode; diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index fc6976755f..6b3e3088d5 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -82,6 +82,7 @@  #include "llvlcomposition.h"  #include "lltrans.h"  #include "llagentui.h" +#include "llmeshrepository.h"  const S32 TERRAIN_TEXTURE_COUNT = 4;  const S32 CORNER_COUNT = 4; @@ -590,9 +591,7 @@ bool LLPanelRegionGeneralInfo::refreshFromRegion(LLViewerRegion* region)  	getChildView("im_btn")->setEnabled(allow_modify);  	getChildView("manage_telehub_btn")->setEnabled(allow_modify); -	const bool enable_mesh = gSavedSettings.getBOOL("MeshEnabled") &&  -		gAgent.getRegion() && -		!gAgent.getRegion()->getCapability("GetMesh").empty(); +	const bool enable_mesh = gMeshRepo.meshRezEnabled();  	getChildView("mesh_rez_enabled_check")->setVisible(enable_mesh);  	getChildView("mesh_rez_enabled_check")->setEnabled(getChildView("mesh_rez_enabled_check")->getEnabled() && enable_mesh);  	// Data gets filled in by processRegionInfo diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 061a42ab57..0f11d05175 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -86,6 +86,7 @@  #include "llvovolume.h"  #include "lluictrlfactory.h"  #include "llaccountingquotamanager.h" +#include "llmeshrepository.h"  // Globals  LLFloaterTools *gFloaterTools = NULL; @@ -423,7 +424,7 @@ void LLFloaterTools::refresh()  	// Refresh object and prim count labels  	LLLocale locale(LLLocale::USER_LOCALE); -	if ((gAgent.getRegion() && gAgent.getRegion()->getCapability("GetMesh").empty()) || !gSavedSettings.getBOOL("MeshEnabled")) +	if (gMeshRepo.meshRezEnabled())  	{		  		std::string obj_count_string;  		LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount()); @@ -788,9 +789,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)  		getChildView("Strength:")->setVisible( land_visible);  	} -	bool show_mesh_cost = gAgent.getRegion() &&  -		                  !gAgent.getRegion()->getCapability("GetMesh").empty() &&  -						  gSavedSettings.getBOOL("MeshEnabled"); +	bool show_mesh_cost = gMeshRepo.meshRezEnabled();  	getChildView("obj_count")->setVisible( !land_visible && !show_mesh_cost);  	getChildView("prim_count")->setVisible( !land_visible && !show_mesh_cost); diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 738d82e732..4eb94dfb8e 100644 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -58,6 +58,7 @@  #include "llworld.h"  #include "v2math.h"  #include "llvoavatar.h" +#include "llmeshrepository.h"  const F32 MAX_MANIP_SELECT_DISTANCE_SQUARED = 11.f * 11.f; @@ -90,9 +91,7 @@ F32 get_default_max_prim_scale(bool is_flora)  {  	// a bit of a hack, but if it's foilage, we don't want to use the  	// new larger scale which would result in giant trees and grass -	if (gSavedSettings.getBOOL("MeshEnabled") &&  -		gAgent.getRegion() &&  -		!gAgent.getRegion()->getCapability("GetMesh").empty() && +	if (gMeshRepo.meshRezEnabled() &&  		!is_flora)  	{  		return DEFAULT_MAX_PRIM_SCALE; diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index a4dcd3cd52..ff9f0e1663 100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -61,6 +61,7 @@  #include "pipeline.h"
  #include "llinventorymodel.h"
  #include "llfoldertype.h"
 +#include "llviewerparcelmgr.h"
  #include "boost/lexical_cast.hpp"
 @@ -3715,3 +3716,33 @@ void LLMeshRepository::buildPhysicsMesh(LLModel::Decomposition& decomp)  		}
  	}
  }
 +
 +
 +bool LLMeshRepository::meshUploadEnabled()
 +{
 +	LLViewerRegion *region = gAgent.getRegion();
 +	if(gSavedSettings.getBOOL("MeshEnabled") && 
 +	   LLViewerParcelMgr::getInstance()->allowAgentBuild() &&
 +	   region)
 +	{
 +		LLSD sim_features;
 +		region->getSimulatorFeatures(sim_features);
 +		return (sim_features.has("MeshUploadEnabled") &&
 +				sim_features["MeshUploadEnabled"].asBoolean());
 +	}
 +	return false;
 +}
 +
 +bool LLMeshRepository::meshRezEnabled()
 +{
 +	LLViewerRegion *region = gAgent.getRegion();
 +	if(gSavedSettings.getBOOL("MeshEnabled") && 
 +	   region)
 +	{
 +		LLSD sim_features;
 +		region->getSimulatorFeatures(sim_features);
 +		return (sim_features.has("MeshRezEnabled") &&
 +				sim_features["MeshRezEnabled"].asBoolean());
 +	}
 +	return false;
 +}
 diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index a0c3989cf5..d5b06cc66f 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -477,6 +477,10 @@ public:  	void buildHull(const LLVolumeParams& params, S32 detail);  	void buildPhysicsMesh(LLModel::Decomposition& decomp); +	 +	bool meshUploadEnabled(); +	bool meshRezEnabled(); +	  	LLSD& getMeshHeader(const LLUUID& mesh_id); diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp index ebddaa90bc..bb87601d20 100644 --- a/indra/newview/llpanelvolume.cpp +++ b/indra/newview/llpanelvolume.cpp @@ -530,16 +530,24 @@ void LLPanelVolume::refresh()  	getChildView("Light Ambiance")->setVisible( visible);  	getChildView("light texture control")->setVisible( visible); -	bool enable_mesh = gSavedSettings.getBOOL("MeshEnabled") &&  -					   gAgent.getRegion() && -					   !gAgent.getRegion()->getCapability("GetMesh").empty(); +	bool enable_mesh = false; +	LLSD sim_features; +	LLViewerRegion *region = gAgent.getRegion(); +	if(region) +	{ +		LLSD sim_features; +		region->getSimulatorFeatures(sim_features);		  +		enable_mesh = sim_features.has("PhysicsShapeTypes"); +	}  	getChildView("label physicsshapetype")->setVisible(enable_mesh);  	getChildView("Physics Shape Type Combo Ctrl")->setVisible(enable_mesh);  	getChildView("Physics Gravity")->setVisible(enable_mesh);  	getChildView("Physics Friction")->setVisible(enable_mesh);  	getChildView("Physics Density")->setVisible(enable_mesh);  	getChildView("Physics Restitution")->setVisible(enable_mesh); +	 +    /* TODO: add/remove individual physics shape types as per the PhysicsShapeTypes simulator features */  } diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index b424f4952d..b9293b3b31 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -107,10 +107,7 @@ class LLMeshUploadVisible : public view_listener_t  {  	bool handleEvent(const LLSD& userdata)  	{ -		return gSavedSettings.getBOOL("MeshEnabled") &&  -			   LLViewerParcelMgr::getInstance()->allowAgentBuild() &&  -			   // mesh *TODO: Use SimulatorFeatures cap to get this info instead. -			   !gAgent.getRegion()->getCapability("ObjectAdd").empty(); +		return gMeshRepo.meshUploadEnabled();  	}  }; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index b0ec5811a5..80207d6568 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -69,6 +69,7 @@  #include "llspatialpartition.h"  #include "stringize.h"  #include "llviewercontrol.h" +#include "llsdserialize.h"  #ifdef LL_WINDOWS  	#pragma warning(disable:4355) @@ -1140,6 +1141,20 @@ void LLViewerRegion::getInfo(LLSD& info)  	info["Region"]["Handle"]["y"] = (LLSD::Integer)y;  } +void LLViewerRegion::getSimulatorFeatures(LLSD& sim_features) +{ +	sim_features = mSimulatorFeatures; +} + +void LLViewerRegion::setSimulatorFeatures(const LLSD& sim_features) +{ +	std::stringstream str; +	 +	LLSDSerialize::toPrettyXML(sim_features, str); +	llinfos << str.str() << llendl; +	mSimulatorFeatures = sim_features; +} +  LLViewerRegion::eCacheUpdateResult LLViewerRegion::cacheFullUpdate(LLViewerObject* objectp, LLDataPackerBinaryBuffer &dp)  {  	U32 local_id = objectp->getLocalID(); @@ -1511,7 +1526,6 @@ void LLViewerRegion::setSeedCapability(const std::string& url)  	capabilityNames.append("MapLayer");  	capabilityNames.append("MapLayerGod");  	capabilityNames.append("NewFileAgentInventory"); -	// mesh *TODO: Use SimulatorFeatures cap to get this info instead.  	capabilityNames.append("ObjectAdd");  	capabilityNames.append("ParcelPropertiesUpdate");  	capabilityNames.append("ParcelMediaURLFilterList"); @@ -1556,6 +1570,42 @@ void LLViewerRegion::setSeedCapability(const std::string& url)  	LLHTTPClient::post(url, capabilityNames, mImpl->mHttpResponderPtr);  } +class SimulatorFeaturesReceived : public LLHTTPClient::Responder +{ +	LOG_CLASS(SimulatorFeaturesReceived); +public: +    SimulatorFeaturesReceived(LLViewerRegion* region) +	: mRegion(region) +    { } +	 +	 +    void error(U32 statusNum, const std::string& reason) +    { +		LL_WARNS2("AppInit", "SimulatorFeatures") << statusNum << ": " << reason << LL_ENDL; +    } +	 +    void result(const LLSD& content) +    { +		if(!mRegion) //region is removed or responder is not created. +		{ +			return ; +		} +		 +		mRegion->setSimulatorFeatures(content); +	} +	 +    static boost::intrusive_ptr<SimulatorFeaturesReceived> build( +																 LLViewerRegion* region) +    { +		return boost::intrusive_ptr<SimulatorFeaturesReceived>( +															   new SimulatorFeaturesReceived(region)); +    } +	 +private: +	LLViewerRegion* mRegion; +}; + +  void LLViewerRegion::setCapability(const std::string& name, const std::string& url)  {  	if(name == "EventQueueGet") @@ -1568,6 +1618,11 @@ void LLViewerRegion::setCapability(const std::string& name, const std::string& u  	{  		LLHTTPSender::setSender(mImpl->mHost, new LLCapHTTPSender(url));  	} +	else if (name == "SimulatorFeatures") +	{ +		// kick off a request for simulator features +		LLHTTPClient::get(url, new SimulatorFeaturesReceived(this)); +	}  	else  	{  		mImpl->mCapabilities[name] = url; @@ -1661,3 +1716,4 @@ std::string LLViewerRegion::getDescription() const      return stringize(*this);  } + diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index a6e5c47b86..d936277231 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -276,6 +276,8 @@ public:  	void getInfo(LLSD& info); +	void getSimulatorFeatures(LLSD& info);	 +	void setSimulatorFeatures(const LLSD& info);  	typedef enum  	{ @@ -401,6 +403,8 @@ private:  	bool	mCapabilitiesReceived;  	BOOL mReleaseNotesRequested; +	 +	LLSD mSimulatorFeatures;  };  inline BOOL LLViewerRegion::getAllowDamage() const diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 6fe79c2e85..4ecf156646 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -601,7 +601,7 @@ public:  			ypos += y_inc; -			if (gSavedSettings.getBOOL("MeshEnabled")) +			if (gMeshRepo.meshRezEnabled())  			{  				addText(xpos, ypos, llformat("%.3f MB Mesh Data Received", LLMeshRepository::sBytesReceived/(1024.f*1024.f))); | 
