diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llprimitive/llmodel.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 11 | ||||
| -rw-r--r-- | indra/newview/llagentcamera.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llfirstuse.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelpreview.cpp | 119 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelpreview.h | 4 | ||||
| -rw-r--r-- | indra/newview/llfloatersearch.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.cpp | 77 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.h | 3 | 
9 files changed, 128 insertions, 110 deletions
| diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 794cdb83d5..57ac7a143f 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -991,6 +991,9 @@ void LLModel::normalizeVolumeFaces()  		scale.splat(1.f);  		scale.div(size); +		LLVector4a inv_scale(1.f); +		inv_scale.div(scale); +  		for (U32 i = 0; i < mVolumeFaces.size(); ++i)  		{  			LLVolumeFace& face = mVolumeFaces[i]; @@ -1007,10 +1010,14 @@ void LLModel::normalizeVolumeFaces()  			// For all the positions, we scale  			// the positions to fit within the unit cube.  			LLVector4a* pos = (LLVector4a*) face.mPositions; +			LLVector4a* norm = (LLVector4a*) face.mNormals; +  			for (U32 j = 0; j < face.mNumVertices; ++j)  			{  			 	pos[j].add(trans);  				pos[j].mul(scale); +				norm[j].mul(inv_scale); +				norm[j].normalize3();  			}  		} diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 071fcd2a3f..78db307d64 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3982,17 +3982,6 @@        <key>Value</key>        <string>http://search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&p=[AUTH_TOKEN]&r=[MATURITY]&lang=[LANGUAGE]&g=[GODLIKE]&sid=[SESSION_ID]&rid=[REGION_ID]&pid=[PARCEL_ID]&channel=[CHANNEL]&version=[VERSION]&major=[VERSION_MAJOR]&minor=[VERSION_MINOR]&patch=[VERSION_PATCH]&build=[VERSION_BUILD]</string>      </map> -    <key>SearchURLBeta</key> -    <map> -      <key>Comment</key> -      <string>URL for Search website, displayed in the Find floater</string> -      <key>Persist</key> -      <integer>0</integer> -      <key>Type</key> -      <string>String</string> -      <key>Value</key> -      <string>http://beta.search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&p=[AUTH_TOKEN]&r=[MATURITY]&lang=[LANGUAGE]&g=[GODLIKE]&sid=[SESSION_ID]&rid=[REGION_ID]&pid=[PARCEL_ID]&channel=[CHANNEL]&version=[VERSION]&major=[VERSION_MAJOR]&minor=[VERSION_MINOR]&patch=[VERSION_PATCH]&build=[VERSION_BUILD]</string> -    </map>      <key>WebProfileURL</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index c6b5a0113f..80085dad9d 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -394,7 +394,9 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi  	LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation  	LLVector3 object_extents;	  	const LLVector4a* oe4 = object->mDrawable->getSpatialExtents(); -	object_extents.set( oe4[1][0], oe4[1][1], oe4[1][2] ); +	LLVector4a size; +	size.setSub(oe4[1], oe4[0]); +	object_extents.set( size[0], size[1], size[2] );  	// make sure they object extents are non-zero  	object_extents.clamp(0.001f, F32_MAX); diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp index 2c4153688a..a9f52282a5 100644 --- a/indra/newview/llfirstuse.cpp +++ b/indra/newview/llfirstuse.cpp @@ -131,7 +131,7 @@ void LLFirstUse::notMoving(bool enable)  // static  void LLFirstUse::viewPopup(bool enable)  { -	firstUseNotification("FirstViewPopup", enable, "HintView", LLSD(), LLSD().with("target", "view_popup").with("direction", "right")); +//	firstUseNotification("FirstViewPopup", enable, "HintView", LLSD(), LLSD().with("target", "view_popup").with("direction", "right"));  }  // static diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index b7e9865228..9dd5269a6b 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -98,7 +98,8 @@  #include "llvfile.h"  #include "llvfs.h"  #include "llcallbacklist.h" - +#include "llviewerobjectlist.h" +#include "llanimationstates.h"  #include "glod/glod.h"  //static @@ -381,12 +382,6 @@ LLFloaterModelPreview::~LLFloaterModelPreview()  {  	sInstance = NULL; -	if ( mModelPreview && mModelPreview->getResetJointFlag() ) -	{		 -		gAgentAvatarp->resetJointPositions(); -	} - -	  	if ( mModelPreview )  	{  		delete mModelPreview; @@ -1577,7 +1572,7 @@ bool LLModelLoader::doLoadModel()  									{  										//llinfos<<"joint "<<lookingForJoint.c_str()<<llendl;  										LLMatrix4 jointTransform = mJointList[lookingForJoint]; -										LLJoint* pJoint = gAgentAvatarp->getJoint( lookingForJoint ); +										LLJoint* pJoint = mPreview->getPreviewAvatar()->getJoint( lookingForJoint );  										if ( pJoint )  										{     											pJoint->storeCurrentXform( jointTransform.getTranslation() );												 @@ -2657,6 +2652,8 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)  	mMasterLegacyJointList.push_front("mHipLeft");  	mMasterLegacyJointList.push_front("mKneeLeft");  	mMasterLegacyJointList.push_front("mFootLeft"); + +	createPreviewAvatar();  }  LLModelPreview::~LLModelPreview() @@ -2710,7 +2707,7 @@ U32 LLModelPreview::calcResourceCost()  	if ( mFMP && mFMP->childGetValue("upload_joints").asBoolean() )  	{ -		gAgentAvatarp->setPelvisOffset( mPelvisZOffset ); +		getPreviewAvatar()->setPelvisOffset( mPelvisZOffset );  	}  	F32 streaming_cost = 0.f; @@ -3848,6 +3845,18 @@ void LLModelPreview::updateStatusMessages()  		}  	} + +	//make sure no hulls have more than 256 points in them +	for (U32 i = 0; upload_ok && i < mModel[LLModel::LOD_PHYSICS].size(); ++i) +	{ +		LLModel* mdl = mModel[LLModel::LOD_PHYSICS][i]; + +		for (U32 j = 0; upload_ok && j < mdl->mPhysics.mHull.size(); ++j) +		{ +			upload_ok = upload_ok && mdl->mPhysics.mHull[i].size() <= 256; +		} +	} +  	bool errorStateFromLoader = getLoadState() >= LLModelLoader::ERROR_PARSING ? true : false;  	bool skinAndRigOk = true; @@ -3871,6 +3880,10 @@ void LLModelPreview::updateStatusMessages()  	{  		mFMP->childEnable("ok_btn");  	} +	else +	{ +		mFMP->childDisable("ok_btn"); +	}  	//add up physics triangles etc  	S32 start = 0; @@ -4277,42 +4290,6 @@ void LLModelPreview::update()  }  //----------------------------------------------------------------------------- -// changeAvatarsJointPositions() -//----------------------------------------------------------------------------- -void LLModelPreview::changeAvatarsJointPositions( LLModel* pModel ) -{ -	if ( mMasterJointList.empty() ) -	{ -		return; -	} - -	std::vector<std::string> :: const_iterator jointListItBegin = pModel->mSkinInfo.mJointNames.begin(); -	std::vector<std::string> :: const_iterator jointListItEnd = pModel->mSkinInfo.mJointNames.end(); - -	S32 index = 0; -	for ( ; jointListItBegin!=jointListItEnd; ++jointListItBegin, ++index ) -	{	 -		std::string elem = *jointListItBegin; -		//llinfos<<"joint "<<elem<<llendl; - -		S32 matrixCnt = pModel->mSkinInfo.mAlternateBindMatrix.size(); -		if ( matrixCnt < 1 ) -		{ -			llinfos<<"Total WTF moment :"<<matrixCnt<<llendl; -		} -		else -		{ -			LLMatrix4 jointTransform = pModel->mSkinInfo.mAlternateBindMatrix[index]; - -			LLJoint* pJoint = gAgentAvatarp->getJoint( elem ); -			if ( pJoint ) -			{    -				pJoint->storeCurrentXform( jointTransform.getTranslation() );												 -			}	 -		} -	} -} -//-----------------------------------------------------------------------------  // getTranslationForJointOffset()  //-----------------------------------------------------------------------------  LLVector3 LLModelPreview::getTranslationForJointOffset( std::string joint ) @@ -4326,6 +4303,30 @@ LLVector3 LLModelPreview::getTranslationForJointOffset( std::string joint )  	return LLVector3(0.0f,0.0f,0.0f);								  }  //----------------------------------------------------------------------------- +// createPreviewAvatar +//----------------------------------------------------------------------------- +void LLModelPreview::createPreviewAvatar( void ) +{ +	mPreviewAvatar = (LLVOAvatar*)gObjectList.createObjectViewer( LL_PCODE_LEGACY_AVATAR, gAgent.getRegion() ); +	if ( mPreviewAvatar ) +	{ +		mPreviewAvatar->createDrawable( &gPipeline ); +		mPreviewAvatar->mIsDummy = TRUE; +		mPreviewAvatar->mSpecialRenderMode = 1; +		mPreviewAvatar->setPositionAgent( LLVector3::zero ); +		mPreviewAvatar->slamPosition(); +		mPreviewAvatar->updateJointLODs(); +		mPreviewAvatar->updateGeometry( mPreviewAvatar->mDrawable ); +		mPreviewAvatar->startMotion( ANIM_AGENT_STAND ); +		mPreviewAvatar->hideSkirt(); +	} +	else +	{ +		llinfos<<"Failed to create preview avatar for upload model window"<<llendl; +	} +} + +//-----------------------------------------------------------------------------  // render()  //-----------------------------------------------------------------------------  BOOL LLModelPreview::render() @@ -4439,25 +4440,6 @@ BOOL LLModelPreview::render()  	mFMP->childSetEnabled("upload_joints", upload_skin); -	//poke at avatar when we upload custom joints -	/*	 -	if ( upload_joints ) -	{ -		for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) -		{ -			for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter) -			{ -				LLModelInstance& instance = *model_iter; -				LLModel* model = instance.mModel; -				if ( !model->mSkinWeights.empty() ) -				{ -					changeAvatarsJointPositions( model ); -				} -			} -		} -	} -	*/ -	  	F32 explode = mFMP->childGetValue("physics_explode").asReal();  	glClear(GL_DEPTH_BUFFER_BIT); @@ -4477,7 +4459,7 @@ BOOL LLModelPreview::render()  	if (skin_weight)  	{ -		target_pos = gAgentAvatarp->getPositionAgent(); +		target_pos = getPreviewAvatar()->getPositionAgent();  		z_near = 0.01f;  		z_far = 1024.f;  		mCameraDistance = 16.f; @@ -4697,8 +4679,7 @@ BOOL LLModelPreview::render()  		}  		else  		{ -			LLVOAvatarSelf* avatar = gAgentAvatarp; -			target_pos = avatar->getPositionAgent(); +			target_pos = getPreviewAvatar()->getPositionAgent();  			LLViewerCamera::getInstance()->setOriginAndLookAt(  															  target_pos + ((LLVector3(mCameraDistance, 0.f, 0.f) + offset) * av_rot),		// camera @@ -4707,7 +4688,7 @@ BOOL LLModelPreview::render()  			if (joint_positions)  			{ -				avatar->renderCollisionVolumes(); +				getPreviewAvatar()->renderCollisionVolumes();  			}  			for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) @@ -4738,7 +4719,7 @@ BOOL LLModelPreview::render()  							LLMatrix4 mat[64];  							for (U32 j = 0; j < model->mSkinInfo.mJointNames.size(); ++j)  							{ -								LLJoint* joint = avatar->getJoint(model->mSkinInfo.mJointNames[j]); +								LLJoint* joint = getPreviewAvatar()->getJoint(model->mSkinInfo.mJointNames[j]);  								if (joint)  								{  									mat[j] = model->mSkinInfo.mInvBindMatrix[j]; diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index b54a72e555..f6d4a08d1f 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -341,6 +341,9 @@ public:  	LLVector3 getTranslationForJointOffset( std::string joint ); +	void		createPreviewAvatar( void ); +	LLVOAvatar* getPreviewAvatar( void ) { return mPreviewAvatar; } +   protected:  	friend class LLModelLoader;  	friend class LLFloaterModelPreview; @@ -422,6 +425,7 @@ public:  	std::deque<std::string> mMasterLegacyJointList;  	std::deque<std::string> mJointsFromNode;  	JointTransformMap		mJointTransformMap; +	LLPointer<LLVOAvatar>	mPreviewAvatar;  };  #endif  // LL_LLFLOATERMODELPREVIEW_H diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index c8fe380710..d5806e375c 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -38,7 +38,6 @@  #include "llui.h"  #include "llviewercontrol.h"  #include "llweb.h" -#include "llversioninfo.h"  // support secondlife:///app/search/{CATEGORY}/{QUERY} SLapps  class LLSearchHandler : public LLCommandHandler @@ -204,15 +203,7 @@ void LLFloaterSearch::search(const LLSD &key)  	// get the search URL and expand all of the substitutions  	// (also adds things like [LANGUAGE], [VERSION], [OS], etc.) -	std::string url; -	if (LLVersionInfo::getChannel().find("Beta") != std::string::npos) -	{ -		url = gSavedSettings.getString("SearchURLBeta"); -	} -	else -	{ -		url = gSavedSettings.getString("SearchURL"); -	} +	std::string url = gSavedSettings.getString("SearchURL");  	url = LLWeb::expandURLSubstitutions(url, subs);  	// and load the URL in the web view diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 0a1eadf4d0..d9a58d56fe 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -85,6 +85,8 @@ U32 LLMeshRepository::sPeakKbps = 0;  const U32 MAX_TEXTURE_UPLOAD_RETRIES = 5; +void dumpLLSDToFile(const LLSD& content, std::string filename); +  std::string header_lod[] =   {  	"lowest_lod", @@ -489,15 +491,36 @@ public:  		mThread(thread)  	{  	} -	virtual void completedRaw(U32 status, const std::string& reason, -							  const LLChannelDescriptors& channels, -							  const LLIOPipe::buffer_ptr_t& buffer) +	virtual void completed(U32 status, +						   const std::string& reason, +						   const LLSD& content)  	{ -		assert_main_thread(); +		//assert_main_thread();  		llinfos << "completed" << llendl;  		mThread->mPendingUploads--; +		dumpLLSDToFile(content,"whole_model_response.xml"); + +		mThread->mWholeModelUploadURL = content["uploader"].asString();  +	} +}; + +class LLWholeModelUploadResponder: public LLCurl::Responder +{ +	LLMeshUploadThread* mThread; +public: +	LLWholeModelUploadResponder(LLMeshUploadThread* thread): +		mThread(thread) +	{ +	} +	virtual void completed(U32 status, +						   const std::string& reason, +						   const LLSD& content) +	{ +		//assert_main_thread(); +		llinfos << "upload completed" << llendl; +		mThread->mPendingUploads--; +		dumpLLSDToFile(content,"whole_model_upload_response.xml");  	} -	  };  LLMeshRepoThread::LLMeshRepoThread() @@ -1261,7 +1284,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data,  	mUploadObjectAssetCapability = gAgent.getRegion()->getCapability("UploadObjectAsset");  	mNewInventoryCapability = gAgent.getRegion()->getCapability("NewFileAgentInventoryVariablePrice"); -	mWholeModelUploadCapability = gAgent.getRegion()->getCapability("NewFileAgentInventory"); +	mWholeModelFeeCapability = gAgent.getRegion()->getCapability("NewFileAgentInventory");  	mOrigin += gAgent.getAtAxis() * scale.magVec();  } @@ -1363,10 +1386,10 @@ void LLMeshUploadThread::run()  	}  } -#if 0 -void dumpLLSDToFile(LLSD& content, std::string& filename) +#if 1 +void dumpLLSDToFile(const LLSD& content, std::string filename)  { -	std::ofstream of(filename); +	std::ofstream of(filename.c_str());  	LLSDSerialize::toPrettyXML(content,of);  }  #endif @@ -1374,9 +1397,10 @@ void dumpLLSDToFile(LLSD& content, std::string& filename)  void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  {  	// TODO where do textures go? -	 +  	LLSD result; +	LLSD res;  	result["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);  	result["asset_type"] = "mesh";  	result["inventory_type"] = "object"; @@ -1385,9 +1409,9 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  	// TODO "optional" fields from the spec -	LLSD res;  	res["mesh_list"] = LLSD::emptyArray(); -	res["texture_list"] = LLSD::emptyArray(); +// TODO Textures +	//res["texture_list"] = LLSD::emptyArray();  	S32 mesh_num = 0;  	S32 texture_num = 0; @@ -1433,10 +1457,15 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  		LLQuaternion rot;  		LLMatrix4 transformation = instance.mTransform;  		decomposeMeshMatrix(transformation,pos,rot,scale); -		 + +#if 0  		mesh_entry["childpos"] = ll_sd_from_vector3(pos);  		mesh_entry["childrot"] = ll_sd_from_quaternion(rot);  		mesh_entry["scale"] = ll_sd_from_vector3(scale); +#endif +		mesh_entry["position"] = ll_sd_from_vector3(LLVector3()); +		mesh_entry["rotation"] = ll_sd_from_quaternion(rot); +		mesh_entry["scale"] = ll_sd_from_vector3(scale);  		// TODO should be binary.  		std::string str = ostr.str(); @@ -1480,9 +1509,8 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  	}  	result["asset_resources"] = res; -#if 0	 -	std::string name("whole_model.xml"); -	dumpLLSDToFile(result,name); +#if 1	 +	dumpLLSDToFile(result,"whole_model.xml");  #endif  	dest = result; @@ -1541,9 +1569,24 @@ void LLMeshUploadThread::doWholeModelUpload()  	mPendingUploads++;  	LLCurlRequest::headers_t headers; -	mCurlRequest->post(mWholeModelUploadCapability, headers, model_data.asString(), +	mCurlRequest->post(mWholeModelFeeCapability, headers, model_data,  					   new LLWholeModelFeeResponder(this)); +	do +	{ +		mCurlRequest->process(); +	} while (mCurlRequest->getQueued() > 0); + +	mCurlRequest->post(mWholeModelUploadURL, headers, model_data["asset_resources"], new LLWholeModelUploadResponder(this)); +	 +	do +	{ +		mCurlRequest->process(); +	} while (mCurlRequest->getQueued() > 0); + +	delete mCurlRequest; +	mCurlRequest = NULL; +  	// Currently a no-op.  	mFinished = true;  } diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index 802e3e1aba..f859e29c07 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -387,7 +387,8 @@ public:  	LLHost			mHost;  	std::string		mUploadObjectAssetCapability;  	std::string		mNewInventoryCapability; -	std::string		mWholeModelUploadCapability; +	std::string		mWholeModelFeeCapability; +	std::string		mWholeModelUploadURL;  	std::queue<LLMeshUploadData> mUploadQ;  	std::queue<LLMeshUploadData> mConfirmedQ; | 
