diff options
| -rw-r--r-- | indra/llprimitive/llmodel.cpp | 19 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelpreview.cpp | 34 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelpreview.h | 12 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.cpp | 32 | ||||
| -rw-r--r-- | indra/newview/llpanellogin.cpp | 13 | 
5 files changed, 86 insertions, 24 deletions
| diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 5af1122451..794cdb83d5 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -232,27 +232,16 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa  	domPRef p = tri->getP();  	domListOfUInts& idx = p->getValue(); -	domListOfFloats v; -	domListOfFloats tc; -	domListOfFloats n; +	domListOfFloats  dummy ; +	domListOfFloats& v = pos_source ? pos_source->getFloat_array()->getValue() : dummy ; +	domListOfFloats& tc = tc_source ? tc_source->getFloat_array()->getValue() : dummy ; +	domListOfFloats& n = norm_source ? norm_source->getFloat_array()->getValue() : dummy ;  	if (pos_source)  	{ -		v = pos_source->getFloat_array()->getValue();  		face.mExtents[0].set(v[0], v[1], v[2]);  		face.mExtents[1].set(v[0], v[1], v[2]);  	} - -	if (tc_source) -	{ -		tc = tc_source->getFloat_array()->getValue(); -	} - -	if (norm_source) -	{ -		n = norm_source->getFloat_array()->getValue(); -	} -  	LLVolumeFace::VertexMapData::PointMap point_map; diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index c66b2255eb..ae0e1b7d46 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -104,6 +104,7 @@  //static  S32 LLFloaterModelPreview::sUploadAmount = 10;  LLFloaterModelPreview* LLFloaterModelPreview::sInstance = NULL; +std::list<LLModelLoader*> LLModelLoader::sActiveLoaderList;  const S32 PREVIEW_BORDER_WIDTH = 2;  const S32 PREVIEW_RESIZE_HANDLE_SIZE = S32(RESIZE_HANDLE_WIDTH * OO_SQRT2) + PREVIEW_BORDER_WIDTH; @@ -1087,6 +1088,15 @@ LLModelLoader::LLModelLoader( std::string filename, S32 lod, LLModelPreview* pre  	{  		mTrySLM = false;  	} + +	assert_main_thread(); +	sActiveLoaderList.push_back(this) ; +} + +LLModelLoader::~LLModelLoader() +{ +	assert_main_thread(); +	sActiveLoaderList.remove(this);  }  void stretch_extents(LLModel* model, LLMatrix4a& mat, LLVector4a& min, LLVector4a& max, BOOL& first_transform) @@ -1872,8 +1882,24 @@ bool LLModelLoader::loadFromSLM(const std::string& filename)  	return true;  } +//static +bool LLModelLoader::isAlive(LLModelLoader* loader) +{ +	if(!loader) +	{ +		return false ; +	} + +	std::list<LLModelLoader*>::iterator iter = sActiveLoaderList.begin() ; +	for(; iter != sActiveLoaderList.end() && (*iter) != loader; ++iter) ; +	 +	return *iter == loader ; +} +  void LLModelLoader::loadModelCallback()  { +	assert_main_thread(); +  	if (mPreview)  	{  		mPreview->loadModelCallback(mLod);	 @@ -1884,6 +1910,12 @@ void LLModelLoader::loadModelCallback()  		apr_sleep(100);  	} +	//doubel check if "this" is valid before deleting it, in case it is aborted during running. +	if(!isAlive(this)) +	{ +		return ; +	} +  	//cleanup model loader  	if (mPreview)  	{ @@ -2693,7 +2725,7 @@ LLModelPreview::~LLModelPreview()  	if (mModelLoader)  	{  		delete mModelLoader; -		mModelLoader->mPreview = NULL; +		mModelLoader = NULL;  	}  	//*HACK : *TODO : turn this back on when we understand why this crashes  	//glodShutdown(); diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index 186bf114d1..7927edcd36 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -80,7 +80,7 @@ public:  	BOOL mFirstTransform;  	LLVector3 mExtents[2];  	bool mTrySLM; - +	  	std::map<daeElement*, LLPointer<LLModel> > mModel;  	typedef std::vector<LLPointer<LLModel> > model_list; @@ -99,6 +99,8 @@ public:  	LLModelLoader( std::string filename, S32 lod, LLModelPreview* preview, JointTransformMap& jointMap,   				   std::deque<std::string>& jointsFromNodes ); +	~LLModelLoader() ; +  	virtual void run();  	bool doLoadModel();  	bool loadFromSLM(const std::string& filename); @@ -131,6 +133,10 @@ public:  	std::map<std::string, std::string> mJointMap;  	JointTransformMap& mJointList;	  	std::deque<std::string>& mJointsFromNode; + +private: +	static std::list<LLModelLoader*> sActiveLoaderList; +	static bool isAlive(LLModelLoader* loader) ;  };  class LLFloaterModelPreview : public LLFloater @@ -331,8 +337,8 @@ public:  	void setLoadState( U32 state ) { mLoadState = state; }  	U32 getLoadState() { return mLoadState; } -		 -	void setResetJointFlag( bool state ) { mResetJoints = state; } +	//setRestJointFlag: If an asset comes through that changes the joints, we want the reset to persist +	void setResetJointFlag( bool state ) { if ( !mResetJoints ) mResetJoints = state; }  	bool getResetJointFlag( void ) { return mResetJoints; }  	LLVector3 getTranslationForJointOffset( std::string joint ); diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index e20e918a2a..dd2ffdf7f1 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -454,6 +454,29 @@ public:  }; +class LLModelObjectUploadResponder: public LLCurl::Responder +{ +	LLSD mObjectAsset; +	LLMeshUploadThread* mThread; + +public: +	LLModelObjectUploadResponder(LLMeshUploadThread* thread, const LLSD& object_asset): +		mThread(thread), +		mObjectAsset(object_asset) +	{ +	} + +	virtual void completedRaw(U32 status, const std::string& reason, +							  const LLChannelDescriptors& channels, +							  const LLIOPipe::buffer_ptr_t& buffer) +	{ +		assert_main_thread(); +		 +		llinfos << "completed" << llendl; +		mThread->mPendingUploads--; +		mThread->mFinished = true; +	} +};  LLMeshRepoThread::LLMeshRepoThread()  : LLThread("mesh repo", NULL)  @@ -1467,10 +1490,13 @@ void LLMeshUploadThread::run()  	if(!isDiscarded())  	{ -		LLHTTPClient::post(url, object_asset, new LLHTTPClient::Responder()); +		mPendingUploads++; +		LLHTTPClient::post(url, object_asset, new LLModelObjectUploadResponder(this,object_asset)); +	} +	else +	{ +		mFinished = true;  	} - -	mFinished = true;  }  void LLMeshUploadThread::uploadModel(LLMeshUploadData& data) diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 979d96ca0d..ab031a9dc3 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -34,6 +34,7 @@  #include "llmd5.h"  #include "llsecondlifeurls.h"  #include "v4color.h" +#include "llversionviewer.h"  #include "llappviewer.h"  #include "llbutton.h" @@ -861,12 +862,20 @@ void LLPanelLogin::loadLoginPage()  								   LLVersionInfo::getShortVersion().c_str(),  								   LLVersionInfo::getBuild()); -	char* curl_channel = curl_escape(LLVersionInfo::getChannel().c_str(), 0); +	char* curl_channel ;  	char* curl_version = curl_escape(version.c_str(), 0); +	if(strcmp(LLVersionInfo::getChannel().c_str(), LL_CHANNEL)) +	{ +		curl_channel = curl_escape(LLVersionInfo::getChannel().c_str(), 0); +	} +	else //if LL_CHANNEL, direct it to "Second Life Beta Viewer". +	{ +		curl_channel = curl_escape("Second Life Beta Viewer", 0);		 +	}  	oStr << "&channel=" << curl_channel;  	oStr << "&version=" << curl_version; - +	  	curl_free(curl_channel);  	curl_free(curl_version); | 
