diff options
| author | Leslie Linden <leslie@lindenlab.com> | 2011-12-12 10:54:45 -0800 | 
|---|---|---|
| committer | Leslie Linden <leslie@lindenlab.com> | 2011-12-12 10:54:45 -0800 | 
| commit | ec30e6e70ff71723e2137595bc6ecd3eb358aabe (patch) | |
| tree | 49055571f280685a440b1d79415a8004b5f28c7e /indra | |
| parent | 6114ce2d27a3c776a59d1f09ad05d9b2f100a35d (diff) | |
| parent | dbc91a7fac9513bdd879c5c2dc82208e08eaad2d (diff) | |
Merge from viewer-development
Diffstat (limited to 'indra')
84 files changed, 1133 insertions, 1132 deletions
| diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp index bb7998c0a8..3b9758f996 100644 --- a/indra/llcommon/llmemory.cpp +++ b/indra/llcommon/llmemory.cpp @@ -159,6 +159,7 @@ void LLMemory::logMemoryInfo(BOOL update)  	if(update)  	{  		updateMemoryInfo() ; +		LLPrivateMemoryPoolManager::getInstance()->updateStatistics() ;  	}  	llinfos << "Current allocated physical memory(KB): " << sAllocatedMemInKB << llendl ; diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index deac3d1780..ec378761c2 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -29,7 +29,7 @@  const S32 LL_VERSION_MAJOR = 3;  const S32 LL_VERSION_MINOR = 2; -const S32 LL_VERSION_PATCH = 5; +const S32 LL_VERSION_PATCH = 6;  const S32 LL_VERSION_BUILD = 0;  const char * const LL_CHANNEL = "Second Life Developer"; diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index c239e3df88..56e01ac851 100644 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -195,7 +195,7 @@ U8* LLImageBase::allocateData(S32 size)  		mData = (U8*)ALLOCATE_MEM(sPrivatePoolp, size);  		if (!mData)  		{ -			llwarns << "allocate image data: " << size << llendl; +			llwarns << "Failed to allocate image data size [" << size << "]" << llendl;  			size = 0 ;  			mWidth = mHeight = 0 ;  			mBadBufferAllocation = true ; diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index 330028c926..7ca25d07fc 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -86,9 +86,7 @@ S32 gCurlMultiCount = 0;  std::vector<LLMutex*> LLCurl::sSSLMutex;  std::string LLCurl::sCAPath;  std::string LLCurl::sCAFile; - -bool LLCurl::sMultiThreaded = false; -static U32 sMainThreadID = 0; +LLCurlThread* LLCurl::sCurlThread = NULL ;  void check_curl_code(CURLcode code)  { @@ -221,14 +219,11 @@ namespace boost  std::set<CURL*> LLCurl::Easy::sFreeHandles;  std::set<CURL*> LLCurl::Easy::sActiveHandles; -LLMutex* LLCurl::Easy::sHandleMutex = NULL; -LLMutex* LLCurl::Easy::sMultiMutex = NULL;  //static  CURL* LLCurl::Easy::allocEasyHandle()  {  	CURL* ret = NULL; -	LLMutexLock lock(sHandleMutex);  	if (sFreeHandles.empty())  	{  		ret = curl_easy_init(); @@ -256,8 +251,6 @@ void LLCurl::Easy::releaseEasyHandle(CURL* handle)  		llerrs << "handle cannot be NULL!" << llendl;  	} -	LLMutexLock lock(sHandleMutex); -	  	if (sActiveHandles.find(handle) != sActiveHandles.end())  	{  		sActiveHandles.erase(handle); @@ -521,23 +514,13 @@ void LLCurl::Easy::prepRequest(const std::string& url,  ////////////////////////////////////////////////////////////////////////////  LLCurl::Multi::Multi() -	: LLThread("Curl Multi"), -	  mQueued(0), +	: mQueued(0),  	  mErrorCount(0), -	  mPerformState(PERFORM_STATE_READY) +	  mState(STATE_READY), +	  mDead(FALSE), +	  mMutexp(NULL), +	  mDeletionMutexp(NULL)  { -	mQuitting = false; - -	mThreaded = LLCurl::sMultiThreaded && LLThread::currentID() == sMainThreadID; -	if (mThreaded) -	{ -		mSignal = new LLCondition(NULL); -	} -	else -	{ -		mSignal = NULL; -	} -  	mCurlMultiHandle = curl_multi_init();  	if (!mCurlMultiHandle)  	{ @@ -545,22 +528,20 @@ LLCurl::Multi::Multi()  		mCurlMultiHandle = curl_multi_init();  	} -	llassert_always(mCurlMultiHandle); -	++gCurlMultiCount; -} - -LLCurl::Multi::~Multi() -{ -	llassert(isStopped()); +	llassert_always(mCurlMultiHandle);	 -	if (LLCurl::sMultiThreaded) +	if(LLCurl::getCurlThread()->getThreaded())  	{ -		LLCurl::Easy::sMultiMutex->lock(); +		mMutexp = new LLMutex(NULL) ; +		mDeletionMutexp = new LLMutex(NULL) ;  	} +	LLCurl::getCurlThread()->addMulti(this) ; -	delete mSignal; -	mSignal = NULL; +	++gCurlMultiCount; +} +LLCurl::Multi::~Multi() +{  	// Clean up active  	for(easy_active_list_t::iterator iter = mEasyActiveList.begin();  		iter != mEasyActiveList.end(); ++iter) @@ -577,75 +558,149 @@ LLCurl::Multi::~Multi()  	mEasyFreeList.clear();  	check_curl_multi_code(curl_multi_cleanup(mCurlMultiHandle)); + +	delete mMutexp ; +	mMutexp = NULL ; +	delete mDeletionMutexp ; +	mDeletionMutexp = NULL ; +  	--gCurlMultiCount; +} -	if (LLCurl::sMultiThreaded) +void LLCurl::Multi::lock() +{ +	if(mMutexp)  	{ -		LLCurl::Easy::sMultiMutex->unlock(); +		mMutexp->lock() ;  	}  } -CURLMsg* LLCurl::Multi::info_read(S32* msgs_in_queue) +void LLCurl::Multi::unlock()  { -	CURLMsg* curlmsg = curl_multi_info_read(mCurlMultiHandle, msgs_in_queue); -	return curlmsg; +	if(mMutexp) +	{ +		mMutexp->unlock() ; +	}  } -void LLCurl::Multi::perform() +void LLCurl::Multi::markDead()  { -	if (mThreaded) +	if(mDeletionMutexp)  	{ -		if (mPerformState == PERFORM_STATE_READY) -		{ -			mSignal->signal(); -		} +		mDeletionMutexp->lock() ;  	} -	else + +	mDead = TRUE ; + +	if(mDeletionMutexp) +	{ +		mDeletionMutexp->unlock() ; +	} +} + +void LLCurl::Multi::setState(LLCurl::Multi::ePerformState state) +{ +	lock() ; +	mState = state ; +	if(mState == STATE_READY)  	{ -		doPerform(); +		LLCurl::getCurlThread()->setPriority(mHandle, LLQueuedThread::PRIORITY_NORMAL) ;  	} +	unlock() ; +} + +LLCurl::Multi::ePerformState LLCurl::Multi::getState() +{ +	ePerformState state ; + +	lock() ; +	state = mState ; +	unlock() ; + +	return state ; +} +	 +bool LLCurl::Multi::isCompleted()  +{ +	return STATE_COMPLETED == getState() ;  } -void LLCurl::Multi::run() +bool LLCurl::Multi::waitToComplete()  { -	llassert(mThreaded); +	if(!mMutexp) //not threaded +	{ +		doPerform() ; +		return true ; +	} -	while (!mQuitting) +	bool completed ; + +	lock() ; +	completed = (STATE_COMPLETED == mState) ; +	if(!completed)  	{ -		mSignal->wait(); -		mPerformState = PERFORM_STATE_PERFORMING; -		if (!mQuitting) -		{ -			LLMutexLock lock(LLCurl::Easy::sMultiMutex); -			doPerform(); -		} +		LLCurl::getCurlThread()->setPriority(mHandle, LLQueuedThread::PRIORITY_URGENT) ;  	} +	unlock() ; + +	return completed;  } -void LLCurl::Multi::doPerform() +CURLMsg* LLCurl::Multi::info_read(S32* msgs_in_queue)  { -	S32 q = 0; -	for (S32 call_count = 0; -			call_count < MULTI_PERFORM_CALL_REPEAT; -			call_count += 1) +	CURLMsg* curlmsg = curl_multi_info_read(mCurlMultiHandle, msgs_in_queue); +	return curlmsg; +} + +//return true if dead +bool LLCurl::Multi::doPerform() +{ +	if(mDeletionMutexp)  	{ -		CURLMcode code = curl_multi_perform(mCurlMultiHandle, &q); -		if (CURLM_CALL_MULTI_PERFORM != code || q == 0) +		mDeletionMutexp->lock() ; +	} +	bool dead = mDead ; + +	if(mDead) +	{ +		setState(STATE_COMPLETED); +		mQueued = 0 ; +	} +	else if(getState() != STATE_COMPLETED) +	{		 +		setState(STATE_PERFORMING); + +		S32 q = 0; +		for (S32 call_count = 0; +				call_count < MULTI_PERFORM_CALL_REPEAT; +				call_count++)  		{ -			check_curl_multi_code(code); -			break; +			CURLMcode code = curl_multi_perform(mCurlMultiHandle, &q); +			if (CURLM_CALL_MULTI_PERFORM != code || q == 0) +			{ +				check_curl_multi_code(code); +			 +				break; +			}  		} -	 + +		mQueued = q;	 +		setState(STATE_COMPLETED) ;  	} -	mQueued = q; -	mPerformState = PERFORM_STATE_COMPLETED; + +	if(mDeletionMutexp) +	{ +		mDeletionMutexp->unlock() ; +	} + +	return dead ;  }  S32 LLCurl::Multi::process()  { -	perform(); +	waitToComplete() ; -	if (mPerformState != PERFORM_STATE_COMPLETED) +	if (getState() != STATE_COMPLETED)  	{  		return 0;  	} @@ -681,7 +736,8 @@ S32 LLCurl::Multi::process()  		}  	} -	mPerformState = PERFORM_STATE_READY; +	setState(STATE_READY); +  	return processed;  } @@ -739,6 +795,87 @@ void LLCurl::Multi::removeEasy(Easy* easy)  	easyFree(easy);  } +//------------------------------------------------------------ +//LLCurlThread +LLCurlThread::CurlRequest::CurlRequest(handle_t handle, LLCurl::Multi* multi, LLCurlThread* curl_thread) : +	LLQueuedThread::QueuedRequest(handle, LLQueuedThread::PRIORITY_NORMAL, FLAG_AUTO_COMPLETE), +	mMulti(multi), +	mCurlThread(curl_thread) +{	 +} + +LLCurlThread::CurlRequest::~CurlRequest() +{	 +	if(mMulti) +	{ +		mCurlThread->deleteMulti(mMulti) ; +		mMulti = NULL ; +	} +} + +bool LLCurlThread::CurlRequest::processRequest() +{ +	bool completed = true ; +	if(mMulti) +	{ +		completed = mCurlThread->doMultiPerform(mMulti) ; +		setPriority(LLQueuedThread::PRIORITY_LOW) ; +	} + +	return completed ; +} + +void LLCurlThread::CurlRequest::finishRequest(bool completed) +{ +	mCurlThread->deleteMulti(mMulti) ; +	mMulti = NULL ; +} +	 +LLCurlThread::LLCurlThread(bool threaded) : +	LLQueuedThread("curlthread", threaded) +{ +} +	 +//virtual  +LLCurlThread::~LLCurlThread()  +{ +} + +S32 LLCurlThread::update(U32 max_time_ms) +{	 +	return LLQueuedThread::update(max_time_ms); +} + +void LLCurlThread::addMulti(LLCurl::Multi* multi) +{ +	multi->mHandle = generateHandle() ; + +	CurlRequest* req = new CurlRequest(multi->mHandle, multi, this) ; + +	if (!addRequest(req)) +	{ +		llwarns << "curl request added when the thread is quitted" << llendl; +	} +} +	 +void LLCurlThread::killMulti(LLCurl::Multi* multi) +{ +	multi->markDead() ; +} + +//private +bool LLCurlThread::doMultiPerform(LLCurl::Multi* multi)  +{ +	return multi->doPerform() ; +} + +//private +void LLCurlThread::deleteMulti(LLCurl::Multi* multi)  +{ +	delete multi ; +} +//------------------------------------------------------------ +  //static  std::string LLCurl::strerror(CURLcode errorcode)  { @@ -753,39 +890,23 @@ LLCurlRequest::LLCurlRequest() :  	mActiveMulti(NULL),  	mActiveRequestCount(0)  { -	mThreadID = LLThread::currentID();  	mProcessing = FALSE;  }  LLCurlRequest::~LLCurlRequest()  { -	llassert_always(mThreadID == LLThread::currentID()); -  	//stop all Multi handle background threads  	for (curlmulti_set_t::iterator iter = mMultiSet.begin(); iter != mMultiSet.end(); ++iter)  	{ -		LLCurl::Multi* multi = *iter; -		multi->mQuitting = true; -		if (multi->mThreaded) -		{ -			while (!multi->isStopped()) -			{ -				multi->mSignal->signal(); -				apr_sleep(1000); -			} -		} +		LLCurl::getCurlThread()->killMulti(*iter) ;  	} -	for_each(mMultiSet.begin(), mMultiSet.end(), DeletePointer()); +	mMultiSet.clear() ;  }  void LLCurlRequest::addMulti()  { -	llassert_always(mThreadID == LLThread::currentID());  	LLCurl::Multi* multi = new LLCurl::Multi(); -	if (multi->mThreaded) -	{ -		multi->start(); -	} +	  	mMultiSet.insert(multi);  	mActiveMulti = multi;  	mActiveRequestCount = 0; @@ -901,7 +1022,6 @@ bool LLCurlRequest::post(const std::string& url,  // Note: call once per frame  S32 LLCurlRequest::process()  { -	llassert_always(mThreadID == LLThread::currentID());  	S32 res = 0;  	mProcessing = TRUE; @@ -915,17 +1035,7 @@ S32 LLCurlRequest::process()  		if (multi != mActiveMulti && tres == 0 && multi->mQueued == 0)  		{  			mMultiSet.erase(curiter); -			multi->mQuitting = true; -			if (multi->mThreaded) -			{ -				while (!multi->isStopped()) -				{ -					multi->mSignal->signal(); -					apr_sleep(1000); -				} -			} - -			delete multi; +			LLCurl::getCurlThread()->killMulti(multi);  		}  	}  	mProcessing = FALSE; @@ -934,7 +1044,6 @@ S32 LLCurlRequest::process()  S32 LLCurlRequest::getQueued()  { -	llassert_always(mThreadID == LLThread::currentID());  	S32 queued = 0;  	for (curlmulti_set_t::iterator iter = mMultiSet.begin();  		 iter != mMultiSet.end(); ) @@ -942,7 +1051,7 @@ S32 LLCurlRequest::getQueued()  		curlmulti_set_t::iterator curiter = iter++;  		LLCurl::Multi* multi = *curiter;  		queued += multi->mQueued; -		if (multi->mPerformState != LLCurl::Multi::PERFORM_STATE_READY) +		if (multi->getState() != LLCurl::Multi::STATE_READY)  		{  			++queued;  		} @@ -959,10 +1068,7 @@ LLCurlEasyRequest::LLCurlEasyRequest()  	  mResultReturned(false)  {  	mMulti = new LLCurl::Multi(); -	if (mMulti->mThreaded) -	{ -		mMulti->start(); -	} +	  	mEasy = mMulti->allocEasy();  	if (mEasy)  	{ @@ -975,16 +1081,7 @@ LLCurlEasyRequest::LLCurlEasyRequest()  LLCurlEasyRequest::~LLCurlEasyRequest()  { -	mMulti->mQuitting = true; -	if (mMulti->mThreaded) -	{ -		while (!mMulti->isStopped()) -		{ -			mMulti->mSignal->signal(); -			apr_sleep(1000); -		} -	} -	delete mMulti; +	LLCurl::getCurlThread()->killMulti(mMulti) ;  }  void LLCurlEasyRequest::setopt(CURLoption option, S32 value) @@ -1080,19 +1177,14 @@ void LLCurlEasyRequest::requestComplete()  	}  } -void LLCurlEasyRequest::perform() -{ -	mMulti->perform(); -} -  // Usage: Call getRestult until it returns false (no more messages)  bool LLCurlEasyRequest::getResult(CURLcode* result, LLCurl::TransferInfo* info)  { -	if (mMulti->mPerformState != LLCurl::Multi::PERFORM_STATE_COMPLETED) +	if (!mMulti->isCompleted())  	{ //we're busy, try again later  		return false;  	} -	mMulti->mPerformState = LLCurl::Multi::PERFORM_STATE_READY; +	mMulti->setState(LLCurl::Multi::STATE_READY) ;  	if (!mEasy)  	{ @@ -1180,8 +1272,6 @@ unsigned long LLCurl::ssl_thread_id(void)  void LLCurl::initClass(bool multi_threaded)  { -	sMainThreadID = LLThread::currentID(); -	sMultiThreaded = multi_threaded;  	// Do not change this "unless you are familiar with and mean to control   	// internal operations of libcurl"  	// - http://curl.haxx.se/libcurl/c/curl_global_init.html @@ -1189,9 +1279,6 @@ void LLCurl::initClass(bool multi_threaded)  	check_curl_code(code); -	Easy::sHandleMutex = new LLMutex(NULL); -	Easy::sMultiMutex = new LLMutex(NULL); -  #if SAFE_SSL  	S32 mutex_count = CRYPTO_num_locks();  	for (S32 i=0; i<mutex_count; i++) @@ -1201,20 +1288,29 @@ void LLCurl::initClass(bool multi_threaded)  	CRYPTO_set_id_callback(&LLCurl::ssl_thread_id);  	CRYPTO_set_locking_callback(&LLCurl::ssl_locking_callback);  #endif + +	sCurlThread = new LLCurlThread(multi_threaded) ;  }  void LLCurl::cleanupClass()  { +	//shut down curl thread +	while(1) +	{ +		if(!sCurlThread->update(1)) //finish all tasks +		{ +			break ; +		} +	} +	sCurlThread->shutdown() ; +	delete sCurlThread ; +	sCurlThread = NULL ; +  #if SAFE_SSL  	CRYPTO_set_locking_callback(NULL);  	for_each(sSSLMutex.begin(), sSSLMutex.end(), DeletePointer());  #endif -	delete Easy::sHandleMutex; -	Easy::sHandleMutex = NULL; -	delete Easy::sMultiMutex; -	Easy::sMultiMutex = NULL; -  	for (std::set<CURL*>::iterator iter = Easy::sFreeHandles.begin(); iter != Easy::sFreeHandles.end(); ++iter)  	{  		CURL* curl = *iter; diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h index 87de202717..a275db3e53 100644 --- a/indra/llmessage/llcurl.h +++ b/indra/llmessage/llcurl.h @@ -42,8 +42,10 @@  #include "lliopipe.h"  #include "llsd.h"  #include "llthread.h" +#include "llqueuedthread.h"  class LLMutex; +class LLCurlThread;  // For whatever reason, this is not typedef'd in curl.h  typedef size_t (*curl_header_callback)(void *ptr, size_t size, size_t nmemb, void *stream); @@ -56,8 +58,6 @@ public:  	class Easy;  	class Multi; -	static bool sMultiThreaded; -  	struct TransferInfo  	{  		TransferInfo() : mSizeDownload(0.0), mTotalTime(0.0), mSpeedDownload(0.0) {} @@ -181,10 +181,12 @@ public:  	static void ssl_locking_callback(int mode, int type, const char *file, int line);  	static unsigned long ssl_thread_id(void); +	static LLCurlThread* getCurlThread() { return sCurlThread ;}  private:  	static std::string sCAPath;  	static std::string sCAFile;  	static const unsigned int MAX_REDIRECTS; +	static LLCurlThread* sCurlThread;  };  class LLCurl::Easy @@ -216,7 +218,7 @@ public:  	U32 report(CURLcode);  	void getTransferInfo(LLCurl::TransferInfo* info); -	void prepRequest(const std::string& url, const std::vector<std::string>& headers, ResponderPtr, S32 time_out = 0, bool post = false); +	void prepRequest(const std::string& url, const std::vector<std::string>& headers, LLCurl::ResponderPtr, S32 time_out = 0, bool post = false);  	const char* getErrorBuffer(); @@ -247,64 +249,111 @@ private:  	// Note: char*'s not strings since we pass pointers to curl  	std::vector<char*>	mStrings; -	ResponderPtr		mResponder; +	LLCurl::ResponderPtr		mResponder;  	static std::set<CURL*> sFreeHandles;  	static std::set<CURL*> sActiveHandles; -	static LLMutex* sHandleMutex; -	static LLMutex* sMultiMutex;  }; -class LLCurl::Multi : public LLThread +class LLCurl::Multi  {  	LOG_CLASS(Multi); + +	friend class LLCurlThread ; + +private: +	~Multi(); + +	void markDead() ; +	bool doPerform(); +  public:  	typedef enum  	{ -		PERFORM_STATE_READY=0, -		PERFORM_STATE_PERFORMING=1, -		PERFORM_STATE_COMPLETED=2 +		STATE_READY=0, +		STATE_PERFORMING=1, +		STATE_COMPLETED=2  	} ePerformState; -	Multi(); -	~Multi(); +	Multi();	 -	Easy* allocEasy(); -	bool addEasy(Easy* easy); +	LLCurl::Easy* allocEasy(); +	bool addEasy(LLCurl::Easy* easy);	 +	void removeEasy(LLCurl::Easy* easy); -	void removeEasy(Easy* easy); +	void lock() ; +	void unlock() ; + +	void setState(ePerformState state) ; +	ePerformState getState() ; +	bool isCompleted() ; + +	bool waitToComplete() ;  	S32 process(); -	void perform(); -	void doPerform(); -	virtual void run(); -  	CURLMsg* info_read(S32* msgs_in_queue);  	S32 mQueued;  	S32 mErrorCount; -	S32 mPerformState; - -	LLCondition* mSignal; -	bool mQuitting; -	bool mThreaded; -  private: -	void easyFree(Easy*); +	void easyFree(LLCurl::Easy*);  	CURLM* mCurlMultiHandle; -	typedef std::set<Easy*> easy_active_list_t; +	typedef std::set<LLCurl::Easy*> easy_active_list_t;  	easy_active_list_t mEasyActiveList; -	typedef std::map<CURL*, Easy*> easy_active_map_t; +	typedef std::map<CURL*, LLCurl::Easy*> easy_active_map_t;  	easy_active_map_t mEasyActiveMap; -	typedef std::set<Easy*> easy_free_list_t; +	typedef std::set<LLCurl::Easy*> easy_free_list_t;  	easy_free_list_t mEasyFreeList; + +	LLQueuedThread::handle_t mHandle ; +	ePerformState mState; + +	BOOL mDead ; +	LLMutex* mMutexp ; +	LLMutex* mDeletionMutexp ;  }; +class LLCurlThread : public LLQueuedThread +{ +public: + +	class CurlRequest : public LLQueuedThread::QueuedRequest +	{ +	protected: +		virtual ~CurlRequest(); // use deleteRequest() +		 +	public: +		CurlRequest(handle_t handle, LLCurl::Multi* multi, LLCurlThread* curl_thread); + +		/*virtual*/ bool processRequest(); +		/*virtual*/ void finishRequest(bool completed); + +	private: +		// input +		LLCurl::Multi* mMulti; +		LLCurlThread*  mCurlThread; +	}; +	friend class CurlRequest; + +public: +	LLCurlThread(bool threaded = true) ; +	virtual ~LLCurlThread() ; + +	S32 update(U32 max_time_ms); + +	void addMulti(LLCurl::Multi* multi) ; +	void killMulti(LLCurl::Multi* multi) ; + +private: +	bool doMultiPerform(LLCurl::Multi* multi) ; +	void deleteMulti(LLCurl::Multi* multi) ; +} ; +  namespace boost  {  	void intrusive_ptr_add_ref(LLCurl::Responder* p); @@ -339,7 +388,6 @@ private:  	LLCurl::Multi* mActiveMulti;  	S32 mActiveRequestCount;  	BOOL mProcessing; -	U32 mThreadID; // debug  };  class LLCurlEasyRequest @@ -357,9 +405,10 @@ public:  	void slist_append(const char* str);  	void sendRequest(const std::string& url);  	void requestComplete(); -	void perform();  	bool getResult(CURLcode* result, LLCurl::TransferInfo* info = NULL);  	std::string getErrorString(); +	bool isCompleted() {return mMulti->isCompleted() ;} +	bool wait() { return mMulti->waitToComplete(); }  	LLCurl::Easy* getEasy() const { return mEasy; } diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp index fa03bb7512..a3a2b2b1b8 100644 --- a/indra/llmessage/llurlrequest.cpp +++ b/indra/llmessage/llurlrequest.cpp @@ -170,6 +170,7 @@ LLURLRequest::~LLURLRequest()  {  	LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);  	delete mDetail; +	mDetail = NULL ;  }  void LLURLRequest::setURL(const std::string& url) @@ -344,7 +345,10 @@ LLIOPipe::EStatus LLURLRequest::process_impl(  		static LLFastTimer::DeclareTimer FTM_URL_PERFORM("Perform");  		{  			LLFastTimer t(FTM_URL_PERFORM); -			mDetail->mCurlRequest->perform(); +			if(!mDetail->mCurlRequest->wait()) +			{ +				return status ; +			}  		}  		while(1) diff --git a/indra/llplugin/llpluginmessagepipe.cpp b/indra/llplugin/llpluginmessagepipe.cpp index 8d13e38ad5..091e93ea4b 100644 --- a/indra/llplugin/llpluginmessagepipe.cpp +++ b/indra/llplugin/llpluginmessagepipe.cpp @@ -94,10 +94,10 @@ void LLPluginMessagePipeOwner::killMessagePipe(void)  LLPluginMessagePipe::LLPluginMessagePipe(LLPluginMessagePipeOwner *owner, LLSocket::ptr_t socket):  	mInputMutex(gAPRPoolp),  	mOutputMutex(gAPRPoolp), +	mOutputStartIndex(0),  	mOwner(owner),  	mSocket(socket)  { -	  	mOwner->setMessagePipe(this);  } @@ -113,6 +113,14 @@ bool LLPluginMessagePipe::addMessage(const std::string &message)  {  	// queue the message for later output  	LLMutexLock lock(&mOutputMutex); + +	// If we're starting to use up too much memory, clear +	if (mOutputStartIndex > 1024 * 1024) +	{ +		mOutput = mOutput.substr(mOutputStartIndex); +		mOutputStartIndex = 0; +	} +		  	mOutput += message;  	mOutput += MESSAGE_DELIMITER;	// message separator @@ -165,35 +173,44 @@ bool LLPluginMessagePipe::pumpOutput()  	if(mSocket)  	{  		apr_status_t status; -		apr_size_t size; +		apr_size_t in_size, out_size;  		LLMutexLock lock(&mOutputMutex); -		if(!mOutput.empty()) + +		const char * output_data = &(mOutput.data()[mOutputStartIndex]); +		if(*output_data != '\0')  		{  			// write any outgoing messages -			size = (apr_size_t)mOutput.size(); +			in_size = (apr_size_t) (mOutput.size() - mOutputStartIndex); +			out_size = in_size;  			setSocketTimeout(0);  //			LL_INFOS("Plugin") << "before apr_socket_send, size = " << size << LL_ENDL; -			status = apr_socket_send( -					mSocket->getSocket(), -					(const char*)mOutput.data(), -					&size); +			status = apr_socket_send(mSocket->getSocket(), +									 output_data, +									 &out_size);  //			LL_INFOS("Plugin") << "after apr_socket_send, size = " << size << LL_ENDL; -			if(status == APR_SUCCESS) +			if((status == APR_SUCCESS) || APR_STATUS_IS_EAGAIN(status))  			{ -				// success -				mOutput = mOutput.substr(size); -			} -			else if(APR_STATUS_IS_EAGAIN(status)) -			{ -				// Socket buffer is full...  -				// remove the written part from the buffer and try again later. -				mOutput = mOutput.substr(size); +				// Success or Socket buffer is full...  +				 +				// If we've pumped the entire string, clear it +				if (out_size == in_size) +				{ +					mOutputStartIndex = 0; +					mOutput.clear(); +				} +				else +				{ +					llassert(in_size > out_size); +					 +					// Remove the written part from the buffer and try again later. +					mOutputStartIndex += out_size; +				}  			}  			else if(APR_STATUS_IS_EOF(status))  			{ diff --git a/indra/llplugin/llpluginmessagepipe.h b/indra/llplugin/llpluginmessagepipe.h index c6f1686bf4..c3498beac0 100644 --- a/indra/llplugin/llpluginmessagepipe.h +++ b/indra/llplugin/llpluginmessagepipe.h @@ -86,6 +86,7 @@ protected:  	std::string mInput;  	LLMutex mOutputMutex;  	std::string mOutput; +	std::string::size_type mOutputStartIndex;  	LLPluginMessagePipeOwner *mOwner;  	LLSocket::ptr_t mSocket; diff --git a/indra/llprimitive/lltextureanim.cpp b/indra/llprimitive/lltextureanim.cpp index 398af4e6e8..185a3f69c0 100644 --- a/indra/llprimitive/lltextureanim.cpp +++ b/indra/llprimitive/lltextureanim.cpp @@ -168,8 +168,8 @@ void LLTextureAnim::unpackTAMessage(LLDataPacker &dp)  	mMode = data[0];  	mFace = data[1]; -	mSizeX = llmax((U8)1, data[2]); -	mSizeY = llmax((U8)1, data[3]); +	mSizeX = data[2]; +	mSizeY = data[3];  	htonmemcpy(&mStart, data + 4, MVT_F32, sizeof(F32));  	htonmemcpy(&mLength, data + 8, MVT_F32, sizeof(F32));  	htonmemcpy(&mRate, data + 12, MVT_F32, sizeof(F32)); diff --git a/indra/llprimitive/llvolumexml.cpp b/indra/llprimitive/llvolumexml.cpp index f4f9d4d713..bf2297a029 100644 --- a/indra/llprimitive/llvolumexml.cpp +++ b/indra/llprimitive/llvolumexml.cpp @@ -34,9 +34,9 @@  //============================================================================ -LLXMLNode *LLVolumeXml::exportProfileParams(const LLProfileParams* params) +LLPointer<LLXMLNode> LLVolumeXml::exportProfileParams(const LLProfileParams* params)  { -	LLXMLNode *ret = new LLXMLNode("profile", FALSE); +	LLPointer<LLXMLNode> ret = new LLXMLNode("profile", FALSE);  	ret->createChild("curve_type", TRUE)->setByteValue(1, ¶ms->getCurveType());  	ret->createChild("interval", FALSE)->setFloatValue(2, ¶ms->getBegin()); @@ -46,9 +46,9 @@ LLXMLNode *LLVolumeXml::exportProfileParams(const LLProfileParams* params)  } -LLXMLNode *LLVolumeXml::exportPathParams(const LLPathParams* params) +LLPointer<LLXMLNode> LLVolumeXml::exportPathParams(const LLPathParams* params)  { -	LLXMLNode *ret = new LLXMLNode("path", FALSE);  +	LLPointer<LLXMLNode> ret = new LLXMLNode("path", FALSE);   	ret->createChild("curve_type", TRUE)->setByteValue(1, ¶ms->getCurveType());  	ret->createChild("interval", FALSE)->setFloatValue(2, ¶ms->getBegin());  	ret->createChild("scale", FALSE)->setFloatValue(2, params->getScale().mV); @@ -63,12 +63,15 @@ LLXMLNode *LLVolumeXml::exportPathParams(const LLPathParams* params)  } -LLXMLNode *LLVolumeXml::exportVolumeParams(const LLVolumeParams* params) +LLPointer<LLXMLNode> LLVolumeXml::exportVolumeParams(const LLVolumeParams* params)  { -	LLXMLNode *ret = new LLXMLNode("shape", FALSE); +	LLPointer<LLXMLNode> ret = new LLXMLNode("shape", FALSE); -	exportPathParams(¶ms->getPathParams())->setParent(ret); -	exportProfileParams(¶ms->getProfileParams())->setParent(ret); +	LLPointer<LLXMLNode> node ; +	node = exportPathParams(¶ms->getPathParams()) ; +	node->setParent(ret); +	node = exportProfileParams(¶ms->getProfileParams()) ; +	node->setParent(ret);  	return ret;  } diff --git a/indra/llprimitive/llvolumexml.h b/indra/llprimitive/llvolumexml.h index 5e79205d9a..9d4d989475 100644 --- a/indra/llprimitive/llvolumexml.h +++ b/indra/llprimitive/llvolumexml.h @@ -34,11 +34,11 @@  class LLVolumeXml  {  public: -	static LLXMLNode* exportProfileParams(const LLProfileParams* params); +	static LLPointer<LLXMLNode> exportProfileParams(const LLProfileParams* params); -	static LLXMLNode* exportPathParams(const LLPathParams* params); +	static LLPointer<LLXMLNode> exportPathParams(const LLPathParams* params); -	static LLXMLNode* exportVolumeParams(const LLVolumeParams* params); +	static LLPointer<LLXMLNode> exportVolumeParams(const LLVolumeParams* params);  };  #endif // LL_LLVOLUMEXML_H diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 812fa7024b..cd827f5091 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -1444,6 +1444,11 @@ const glh::matrix4f& LLRender::getModelviewMatrix()  	return mMatrix[MM_MODELVIEW][mMatIdx[MM_MODELVIEW]];  } +const glh::matrix4f& LLRender::getProjectionMatrix() +{ +	return mMatrix[MM_PROJECTION][mMatIdx[MM_PROJECTION]]; +} +  void LLRender::translateUI(F32 x, F32 y, F32 z)  {  	if (mUIOffset.empty()) diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index 7581b9f908..fa5f7f311d 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -348,6 +348,7 @@ public:  	void matrixMode(U32 mode);	  	const glh::matrix4f& getModelviewMatrix(); +	const glh::matrix4f& getProjectionMatrix();  	void syncMatrices();  	void syncLightState(); diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index eea768a3ea..ac9dc9544d 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -845,28 +845,42 @@ BOOL LLShaderMgr::linkProgramObject(GLhandleARB obj, BOOL suppress_errors)  		LL_WARNS("ShaderLoading") << "GLSL Linker Error:" << LL_ENDL;  	} -// NOTE: Removing LL_DARWIN block as it doesn't seem to actually give the correct answer,  -// but want it for reference once I move it. -#if 0 -	// Force an evaluation of the gl state so the driver can tell if the shader will run in hardware or software -	// per Apple's suggestion    -	glBegin(gGL.mMode); -	glEnd(); - -	// Query whether the shader can or cannot run in hardware -	// http://developer.apple.com/qa/qa2007/qa1502.html -	long vertexGPUProcessing; -	CGLContextObj ctx = CGLGetCurrentContext(); -	CGLGetParameter (ctx, kCGLCPGPUVertexProcessing, &vertexGPUProcessing);	 -	long fragmentGPUProcessing; -	CGLGetParameter (ctx, kCGLCPGPUFragmentProcessing, &fragmentGPUProcessing); -	if (!fragmentGPUProcessing || !vertexGPUProcessing) +#if LL_DARWIN + +	// For some reason this absolutely kills the frame rate when VBO's are enabled +	if (0)  	{ -		LL_WARNS("ShaderLoading") << "GLSL Linker: Running in Software:" << LL_ENDL; -		success = GL_FALSE; -		suppress_errors = FALSE;		 +		// Force an evaluation of the gl state so the driver can tell if the shader will run in hardware or software +		// per Apple's suggestion +		LLGLSLShader::sNoFixedFunction = false; +		 +		glUseProgramObjectARB(obj); + +		gGL.begin(LLRender::TRIANGLES); +		gGL.vertex3f(0.0f, 0.0f, 0.0f); +		gGL.vertex3f(0.0f, 0.0f, 0.0f); +		gGL.vertex3f(0.0f, 0.0f, 0.0f); +		gGL.end(); +		gGL.flush(); +		 +		glUseProgramObjectARB(0); +		 +		LLGLSLShader::sNoFixedFunction = true; + +		// Query whether the shader can or cannot run in hardware +		// http://developer.apple.com/qa/qa2007/qa1502.html +		GLint vertexGPUProcessing, fragmentGPUProcessing; +		CGLContextObj ctx = CGLGetCurrentContext(); +		CGLGetParameter(ctx, kCGLCPGPUVertexProcessing, &vertexGPUProcessing);	 +		CGLGetParameter(ctx, kCGLCPGPUFragmentProcessing, &fragmentGPUProcessing); +		if (!fragmentGPUProcessing || !vertexGPUProcessing) +		{ +			LL_WARNS("ShaderLoading") << "GLSL Linker: Running in Software:" << LL_ENDL; +			success = GL_FALSE; +			suppress_errors = FALSE;		 +		}  	} -	 +  #else  	std::string log = get_object_log(obj);  	LLStringUtil::toLower(log); diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 622f3e215c..466fac33ea 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -175,6 +175,7 @@ LLScrollListCtrl::LLScrollListCtrl(const LLScrollListCtrl::Params& p)  	mBorder(NULL),  	mSortCallback(NULL),  	mPopupMenu(NULL), +	mCommentTextView(NULL),  	mNumDynamicWidthColumns(0),  	mTotalStaticColumnWidth(0),  	mTotalColumnPadding(0), @@ -476,7 +477,12 @@ void LLScrollListCtrl::updateLayout()  		getRect().getWidth() - 2 * mBorderThickness,  		getRect().getHeight() - (2 * mBorderThickness ) - heading_size ); -	getChildView("comment_text")->setShape(mItemListRect); +	if (mCommentTextView == NULL) +	{ +		mCommentTextView = getChildView("comment_text"); +	} + +	mCommentTextView->setShape(mItemListRect);  	// how many lines of content in a single "page"  	S32 page_lines =  getLinesPerPage(); diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h index 09ab89960d..ae8aea9245 100644 --- a/indra/llui/llscrolllistctrl.h +++ b/indra/llui/llscrolllistctrl.h @@ -480,6 +480,8 @@ private:  	S32				mHighlightedItem;  	class LLViewBorder*	mBorder;  	LLContextMenu	*mPopupMenu; +	 +	LLView			*mCommentTextView;  	LLWString		mSearchString;  	LLFrameTimer	mSearchTimer; diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 33bc247987..6b74c5a6be 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -1833,9 +1833,12 @@ void LLUI::setupPaths()  	LLXMLNodePtr root;  	BOOL success  = LLXMLNode::parseFile(filename, root, NULL);  	Paths paths; -	LLXUIParser parser; -	parser.readXUI(root, paths, filename); +	if(success) +	{ +		LLXUIParser parser; +		parser.readXUI(root, paths, filename); +	}  	sXUIPaths.clear();  	if (success && paths.validateBlock()) diff --git a/indra/llxml/llxmlnode.cpp b/indra/llxml/llxmlnode.cpp index 9f1e249ddd..2b4a0fc2a1 100644 --- a/indra/llxml/llxmlnode.cpp +++ b/indra/llxml/llxmlnode.cpp @@ -693,7 +693,7 @@ bool LLXMLNode::parseFile(const std::string& filename, LLXMLNodePtr& node, LLXML  	LLFILE* fp = LLFile::fopen(filename, "rb");		/* Flawfinder: ignore */  	if (fp == NULL)  	{ -		node = new LLXMLNode(); +		node = NULL ;  		return false;  	}  	fseek(fp, 0, SEEK_END); @@ -746,7 +746,7 @@ bool LLXMLNode::parseBuffer(  	{  		llwarns << "Parse failure - wrong number of top-level nodes xml."  				<< llendl; -		node = new LLXMLNode(); +		node = NULL ;  		return false;  	} @@ -805,7 +805,7 @@ bool LLXMLNode::parseStream(  	{  		llwarns << "Parse failure - wrong number of top-level nodes xml."  				<< llendl; -		node = new LLXMLNode(); +		node = NULL;  		return false;  	} @@ -1206,7 +1206,7 @@ bool LLXMLNode::getChild(const LLStringTableEntry* name, LLXMLNodePtr& node, BOO  	{  		return mDefault->getChild(name, node, FALSE);  	} -	node = new LLXMLNode(); +	node = NULL;  	return false;  } @@ -1277,7 +1277,7 @@ bool LLXMLNode::getAttribute(const LLStringTableEntry* name, LLXMLNodePtr& node,  	{  		return mDefault->getAttribute(name, node, FALSE);  	} -	node = new LLXMLNode(); +	  	return false;  } diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp index 58654dcc21..afc76024d1 100644 --- a/indra/llxuixml/llxuiparser.cpp +++ b/indra/llxuixml/llxuiparser.cpp @@ -1381,6 +1381,7 @@ bool LLSimpleXUIParser::readXUI(const std::string& filename, LLInitParam::BaseBl  	if( !file.isOpen() )  	{  		LL_WARNS("ReadXUI") << "Unable to open file " << filename << LL_ENDL; +		XML_ParserFree( mParser );  		return false;  	} diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index c1a3f8480d..aa8ad53a3d 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -7858,18 +7858,6 @@      <integer>0</integer>    </map> -  <key>RenderAnimateTrees</key> -  <map> -    <key>Comment</key> -    <string>Use GL matrix ops to animate tree branches.</string> -    <key>Persist</key> -    <integer>1</integer> -    <key>Type</key> -    <string>Boolean</string> -    <key>Value</key> -    <integer>0</integer> -  </map> -      <key>RenderMinimumLODTriangleCount</key>    <map>      <key>Comment</key> @@ -10379,39 +10367,6 @@        <key>Value</key>        <integer>0</integer>      </map>   -    <key>SnapshotLocalLastResolution</key> -    <map> -      <key>Comment</key> -      <string>Take next local snapshot at this resolution</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>S32</string> -      <key>Value</key> -      <integer>0</integer> -    </map> -    <key>SnapshotProfileLastResolution</key> -    <map> -      <key>Comment</key> -      <string>Take next profile snapshot at this resolution</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>S32</string> -      <key>Value</key> -      <integer>0</integer> -    </map> -    <key>SnapshotPostcardLastResolution</key> -    <map> -      <key>Comment</key> -      <string>Take next postcard snapshot at this resolution</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>S32</string> -      <key>Value</key> -      <integer>0</integer> -    </map>      <key>SnapshotQuality</key>      <map>        <key>Comment</key> @@ -10445,17 +10400,6 @@        <key>Value</key>        <string>http://photos.apps.staging.avatarsunited.com/viewer_config</string>      </map> -    <key>SnapshotTextureLastResolution</key> -    <map> -      <key>Comment</key> -      <string>Take next texture snapshot at this resolution</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>S32</string> -      <key>Value</key> -      <integer>0</integer> -    </map>      <key>SpeedTest</key>      <map>        <key>Comment</key> diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 4cca287356..c012efa056 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -51,19 +51,6 @@ VARYING vec2 vary_texcoord0;  uniform mat4 inv_proj; -vec4 getPosition(vec2 pos_screen) -{ -	float depth = texture2DRect(depthMap, pos_screen.xy).a; -	vec2 sc = pos_screen.xy*2.0; -	sc /= screen_res; -	sc -= vec2(1.0,1.0); -	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); -	vec4 pos = inv_proj * ndc; -	pos /= pos.w; -	pos.w = 1.0; -	return pos; -} -  void main()   {  	vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5; diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl index 46d42d2a4a..c1fb7b55d4 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl @@ -37,7 +37,7 @@ VARYING vec2 vary_texcoord0;  void main()   { -	float alpha = texture2D(diffuseMap, vary_texcoord0.xy).a * vertex_color.a; +	float alpha = diffuseLookup(vary_texcoord0.xy).a * vertex_color.a;  	if (alpha < minimum_alpha)  	{ diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl index 6a3cba771b..7d3b06c56e 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl @@ -34,15 +34,18 @@ VARYING vec4 post_pos;  VARYING vec4 vertex_color;  VARYING vec2 vary_texcoord0; +void passTextureIndex(); +  void main()  {  	//transform vertex  	vec4 pos = modelview_projection_matrix*vec4(position.xyz, 1.0); -	  	post_pos = pos;  	gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w); +	passTextureIndex(); +  	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;  	vertex_color = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index 60952ea38e..51110ae4df 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -35,7 +35,6 @@ uniform sampler2DRect positionMap;  uniform sampler2DRect normalMap;  uniform sampler2DRect lightMap;  uniform sampler2DRect depthMap; -uniform sampler2D	  noiseMap;  uniform samplerCube environmentMap;  uniform sampler2D	  lightFunc; @@ -60,9 +59,7 @@ uniform vec4 distance_multiplier;  uniform vec4 max_y;  uniform vec4 glow;  uniform float scene_light_strength; -uniform vec3 env_mat[3]; -//uniform mat4 shadow_matrix[3]; -//uniform vec4 shadow_clip; +uniform mat3 env_mat;  uniform mat3 ssao_effect_mat;  uniform vec3 sun_dir; @@ -279,8 +276,7 @@ void main()  	vec3 pos = getPosition_d(tc, depth).xyz;  	vec3 norm = texture2DRect(normalMap, tc).xyz;  	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm -	//vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0).xyz; -	 +		  	float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);  	vec4 diffuse = texture2DRect(diffuseRect, tc); @@ -309,6 +305,11 @@ void main()  			vec3 spec_contrib = dumbshiny * spec.rgb;  			bloom = dot(spec_contrib, spec_contrib);  			col += spec_contrib; + +			//add environmentmap +			vec3 env_vec = env_mat * refnormpersp; +			col = mix(col.rgb, textureCube(environmentMap, env_vec).rgb,  +				max(spec.a-diffuse.a*2.0, 0.0));   		}  		col = atmosLighting(col); diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl index e014e53d25..5522e6c41d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl @@ -52,7 +52,7 @@ void main()  	vec4 outColor = mix( mix(color3, color2, alpha2), mix(color1, color0, alpha1), alphaFinal );  	gl_FragData[0] = vec4(outColor.rgb, 0.0); -	gl_FragData[1] = vec4(outColor.rgb*0.2, 0.2); +	gl_FragData[1] = vec4(0,0,0,0);  	vec3 nvn = normalize(vary_normal);  	gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl index 8d88e93698..1179b212ae 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl @@ -56,19 +56,6 @@ uniform float shadow_bias;  uniform mat4 inv_proj; -vec4 getPosition(vec2 pos_screen) -{ -	float depth = texture2DRect(depthMap, pos_screen.xy).a; -	vec2 sc = pos_screen.xy*2.0; -	sc /= screen_res; -	sc -= vec2(1.0,1.0); -	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); -	vec4 pos = inv_proj * ndc; -	pos.xyz /= pos.w; -	pos.w = 1.0; -	return pos; -} -  float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl)  {  	stc.xyz /= stc.w; diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index eb367d4ad6..97f3063a9e 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -34,7 +34,6 @@ uniform sampler2DRect specularRect;  uniform sampler2DRect normalMap;  uniform sampler2DRect lightMap;  uniform sampler2DRect depthMap; -uniform sampler2D	  noiseMap;  uniform samplerCube environmentMap;  uniform sampler2D	  lightFunc;  uniform vec3 gi_quad; @@ -60,7 +59,7 @@ uniform vec4 distance_multiplier;  uniform vec4 max_y;  uniform vec4 glow;  uniform float scene_light_strength; -uniform vec3 env_mat[3]; +uniform mat3 env_mat;  uniform vec4 shadow_clip;  uniform mat3 ssao_effect_mat; @@ -279,8 +278,7 @@ void main()  	vec3 pos = getPosition_d(tc, depth).xyz;  	vec3 norm = texture2DRect(normalMap, tc).xyz;  	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm -	//vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0).xyz; -	 +		  	float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);  	vec4 diffuse = texture2DRect(diffuseRect, tc); @@ -315,6 +313,11 @@ void main()  			vec3 spec_contrib = dumbshiny * spec.rgb;  			bloom = dot(spec_contrib, spec_contrib);  			col += spec_contrib; + +			//add environmentmap +			vec3 env_vec = env_mat * refnormpersp; +			col = mix(col.rgb, textureCube(environmentMap, env_vec).rgb,  +				max(spec.a-diffuse.a*2.0, 0.0));   		}  		col = atmosLighting(col); diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index 390da2273d..942c043081 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -1,4 +1,4 @@ -version 31 +version 32  // The version number above should be implemented IF AND ONLY IF some  // change has been made that is sufficiently important to justify  // resetting the graphics preferences of all users to the recommended @@ -51,7 +51,7 @@ RenderTerrainLODFactor			1	2.0  RenderTransparentWater			1	1  RenderTreeLODFactor				1	1.0  RenderUseImpostors				1	1 -RenderVBOEnable					1	0 +RenderVBOEnable					1	1  RenderVBOMappingDisable			1	1  RenderVolumeLODFactor			1	2.0  UseStartScreen					1	1 @@ -67,7 +67,7 @@ RenderDeferred				1	1  RenderDeferredSSAO			1	1  RenderShadowDetail			1	2  WatchdogDisabled				1	1 -RenderUseStreamVBO			1	0 +RenderUseStreamVBO			1	1  RenderFSAASamples			1	16  RenderMaxTextureIndex		1	16 diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index cbaddd74c4..b45f9c55fb 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1381,6 +1381,11 @@ bool LLAppViewer::mainLoop()  					}  				}  				gMeshRepo.update() ; +				 +				if(!LLCurl::getCurlThread()->update(1)) +				{ +					LLCurl::getCurlThread()->pause() ; //nothing in the curl thread. +				}  				if(!total_work_pending) //pause texture fetching threads if nothing to process.  				{ @@ -1776,6 +1781,7 @@ bool LLAppViewer::cleanup()  		pending += LLAppViewer::getTextureFetch()->update(1); // unpauses the texture fetch thread  		pending += LLVFSThread::updateClass(0);  		pending += LLLFSThread::updateClass(0); +		pending += LLCurl::getCurlThread()->update(1) ;  		F64 idle_time = idleTimer.getElapsedTimeF64();  		if(!pending)  		{ @@ -1787,6 +1793,7 @@ bool LLAppViewer::cleanup()  			break;  		}  	} +	LLCurl::getCurlThread()->pause() ;  	// Delete workers first  	// shotdown all worker threads before deleting them in case of co-dependencies diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp index ba511a3693..7d3170cb76 100644 --- a/indra/newview/lldebugview.cpp +++ b/indra/newview/lldebugview.cpp @@ -55,9 +55,23 @@ LLDebugView* gDebugView = NULL;  static LLDefaultChildRegistry::Register<LLDebugView> r("debug_view");  LLDebugView::LLDebugView(const LLDebugView::Params& p) -:	LLView(p) +:	LLView(p), +	mFastTimerView(NULL), +	mMemoryView(NULL), +	mDebugConsolep(NULL), +	mFloaterSnapRegion(NULL)  {} +LLDebugView::~LLDebugView() +{ +	// These have already been deleted.  Fix the globals appropriately. +	gDebugView = NULL; +	gTextureView = NULL; +	gSceneView = NULL; +	gTextureSizeView = NULL; +	gTextureCategoryView = NULL; +} +  void LLDebugView::init()  {  	LLRect r; @@ -109,8 +123,6 @@ void LLDebugView::init()  	addChild(gTextureView);  	//gTextureView->reshape(r.getWidth(), r.getHeight(), TRUE); -	 -  	if(gAuditTexture)  	{ @@ -136,22 +148,15 @@ void LLDebugView::init()  	}  } - -LLDebugView::~LLDebugView() -{ -	// These have already been deleted.  Fix the globals appropriately. -	gDebugView = NULL; -	gTextureView = NULL; -	gSceneView = NULL; -	gTextureSizeView = NULL; -	gTextureCategoryView = NULL; -} -  void LLDebugView::draw()  { -	LLView* floater_snap_region = getRootView()->getChildView("floater_snap_region"); +	if (mFloaterSnapRegion == NULL) +	{ +		mFloaterSnapRegion = getRootView()->getChildView("floater_snap_region"); +	} +  	LLRect debug_rect; -	floater_snap_region->localRectToOtherView(floater_snap_region->getLocalRect(), &debug_rect, getParent()); +	mFloaterSnapRegion->localRectToOtherView(mFloaterSnapRegion->getLocalRect(), &debug_rect, getParent());  	setShape(debug_rect);  	LLView::draw(); diff --git a/indra/newview/lldebugview.h b/indra/newview/lldebugview.h index 907a42c981..5aec77ad62 100644 --- a/indra/newview/lldebugview.h +++ b/indra/newview/lldebugview.h @@ -51,17 +51,19 @@ public:  			changeDefault(mouse_opaque, false);  		}  	}; +	  	LLDebugView(const Params&);  	~LLDebugView();  	void init();  	void draw(); - +	  	void setStatsVisible(BOOL visible);  	LLFastTimerView* mFastTimerView;  	LLMemoryView*	 mMemoryView;  	LLConsole*		 mDebugConsolep; +	LLView*			 mFloaterSnapRegion;  };  extern LLDebugView* gDebugView; diff --git a/indra/newview/lldrawpool.h b/indra/newview/lldrawpool.h index c7acbb42c6..5a2981e749 100644 --- a/indra/newview/lldrawpool.h +++ b/indra/newview/lldrawpool.h @@ -133,7 +133,6 @@ public:  		PASS_ALPHA,  		PASS_ALPHA_MASK,  		PASS_FULLBRIGHT_ALPHA_MASK, -		PASS_ALPHA_SHADOW,  		NUM_RENDER_TYPES,  	}; diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp index d198e28c14..3165a3516c 100644 --- a/indra/newview/lldrawpooltree.cpp +++ b/indra/newview/lldrawpooltree.cpp @@ -97,25 +97,18 @@ void LLDrawPoolTree::render(S32 pass)  	LLGLState test(GL_ALPHA_TEST, LLGLSLShader::sNoFixedFunction ? 0 : 1);  	LLOverrideFaceColor color(this, 1.f, 1.f, 1.f, 1.f); -	if (gSavedSettings.getBOOL("RenderAnimateTrees")) -	{ -		renderTree(); -	} -	else +	gGL.getTexUnit(sDiffTex)->bind(mTexturep); +				 +	for (std::vector<LLFace*>::iterator iter = mDrawFace.begin(); +		 iter != mDrawFace.end(); iter++)  	{ -		gGL.getTexUnit(sDiffTex)->bind(mTexturep); -					 -		for (std::vector<LLFace*>::iterator iter = mDrawFace.begin(); -			 iter != mDrawFace.end(); iter++) +		LLFace *face = *iter; +		LLVertexBuffer* buff = face->getVertexBuffer(); +		if(buff)  		{ -			LLFace *face = *iter; -			LLVertexBuffer* buff = face->getVertexBuffer(); -			if(buff) -			{ -				buff->setBuffer(LLDrawPoolTree::VERTEX_DATA_MASK); -				buff->drawRange(LLRender::TRIANGLES, 0, buff->getNumVerts()-1, buff->getNumIndices(), 0);  -				gPipeline.addTrianglesDrawn(buff->getNumIndices()); -			} +			buff->setBuffer(LLDrawPoolTree::VERTEX_DATA_MASK); +			buff->drawRange(LLRender::TRIANGLES, 0, buff->getNumVerts()-1, buff->getNumIndices(), 0);  +			gPipeline.addTrianglesDrawn(buff->getNumIndices());  		}  	}  } @@ -187,133 +180,6 @@ void LLDrawPoolTree::endShadowPass(S32 pass)  	gDeferredTreeShadowProgram.unbind();  } - -void LLDrawPoolTree::renderTree(BOOL selecting) -{ -	LLGLState normalize(GL_NORMALIZE, TRUE); -	 -	// Bind the texture for this tree. -	gGL.getTexUnit(sDiffTex)->bind(mTexturep.get(), TRUE); -		 -	U32 indices_drawn = 0; - -	gGL.matrixMode(LLRender::MM_MODELVIEW); -	 -	for (std::vector<LLFace*>::iterator iter = mDrawFace.begin(); -		 iter != mDrawFace.end(); iter++) -	{ -		LLFace *face = *iter; -		LLDrawable *drawablep = face->getDrawable(); - -		if (drawablep->isDead() || !face->getVertexBuffer()) -		{ -			continue; -		} - -		face->getVertexBuffer()->setBuffer(LLDrawPoolTree::VERTEX_DATA_MASK); -		U16* indicesp = (U16*) face->getVertexBuffer()->getIndicesPointer(); - -		// Render each of the trees -		LLVOTree *treep = (LLVOTree *)drawablep->getVObj().get(); - -		LLColor4U color(255,255,255,255); - -		if (!selecting || treep->mGLName != 0) -		{ -			if (selecting) -			{ -				S32 name = treep->mGLName; -				 -				color = LLColor4U((U8)(name >> 16), (U8)(name >> 8), (U8)name, 255); -			} -			 -			gGLLastMatrix = NULL; -			gGL.loadMatrix(gGLModelView); -			//gGL.pushMatrix(); -			F32 mat[16]; -			for (U32 i = 0; i < 16; i++) -				mat[i] = (F32) gGLModelView[i]; - -			LLMatrix4 matrix(mat); -			 -			// Translate to tree base  HACK - adjustment in Z plants tree underground -			const LLVector3 &pos_agent = treep->getPositionAgent(); -			//gGL.translatef(pos_agent.mV[VX], pos_agent.mV[VY], pos_agent.mV[VZ] - 0.1f); -			LLMatrix4 trans_mat; -			trans_mat.setTranslation(pos_agent.mV[VX], pos_agent.mV[VY], pos_agent.mV[VZ] - 0.1f); -			trans_mat *= matrix; -			 -			// Rotate to tree position and bend for current trunk/wind -			// Note that trunk stiffness controls the amount of bend at the trunk as  -			// opposed to the crown of the tree -			//  -			const F32 TRUNK_STIFF = 22.f; -			 -			LLQuaternion rot =  -				LLQuaternion(treep->mTrunkBend.magVec()*TRUNK_STIFF*DEG_TO_RAD, LLVector4(treep->mTrunkBend.mV[VX], treep->mTrunkBend.mV[VY], 0)) * -				LLQuaternion(90.f*DEG_TO_RAD, LLVector4(0,0,1)) * -				treep->getRotation(); - -			LLMatrix4 rot_mat(rot); -			rot_mat *= trans_mat; - -			F32 radius = treep->getScale().magVec()*0.05f; -			LLMatrix4 scale_mat; -			scale_mat.mMatrix[0][0] =  -				scale_mat.mMatrix[1][1] = -				scale_mat.mMatrix[2][2] = radius; - -			scale_mat *= rot_mat; - -			const F32 THRESH_ANGLE_FOR_BILLBOARD = 15.f; -			const F32 BLEND_RANGE_FOR_BILLBOARD = 3.f; - -			F32 droop = treep->mDroop + 25.f*(1.f - treep->mTrunkBend.magVec()); -			 -			S32 stop_depth = 0; -			F32 app_angle = treep->getAppAngle()*LLVOTree::sTreeFactor; -			F32 alpha = 1.0; -			S32 trunk_LOD = LLVOTree::sMAX_NUM_TREE_LOD_LEVELS; - -			for (S32 j = 0; j < 4; j++) -			{ - -				if (app_angle > LLVOTree::sLODAngles[j]) -				{ -					trunk_LOD = j; -					break; -				} -			}  -			if(trunk_LOD >= LLVOTree::sMAX_NUM_TREE_LOD_LEVELS) -			{ -				continue ; //do not render. -			} - -			if (app_angle < (THRESH_ANGLE_FOR_BILLBOARD - BLEND_RANGE_FOR_BILLBOARD)) -			{ -				// -				//  Draw only the billboard  -				// -				//  Only the billboard, can use closer to normal alpha func. -				stop_depth = -1; -				LLFacePool::LLOverrideFaceColor clr(this, color);  -				indices_drawn += treep->drawBranchPipeline(scale_mat, indicesp, trunk_LOD, stop_depth, treep->mDepth, treep->mTrunkDepth, 1.0, treep->mTwist, droop, treep->mBranches, alpha); -			} -			else // if (app_angle > (THRESH_ANGLE_FOR_BILLBOARD + BLEND_RANGE_FOR_BILLBOARD)) -			{ -				// -				//  Draw only the full geometry tree -				// -				//stop_depth = (app_angle < THRESH_ANGLE_FOR_RECURSION_REDUCTION); -				LLFacePool::LLOverrideFaceColor clr(this, color);  -				indices_drawn += treep->drawBranchPipeline(scale_mat, indicesp, trunk_LOD, stop_depth, treep->mDepth, treep->mTrunkDepth, 1.0, treep->mTwist, droop, treep->mBranches, alpha); -			} -			 -			//gGL.popMatrix(); -		} -	} -} -  BOOL LLDrawPoolTree::verify() const  {  /*	BOOL ok = TRUE; diff --git a/indra/newview/lldrawpooltree.h b/indra/newview/lldrawpooltree.h index ddb259bb82..e7e25453cf 100644 --- a/indra/newview/lldrawpooltree.h +++ b/indra/newview/lldrawpooltree.h @@ -68,9 +68,6 @@ public:  	/*virtual*/ LLColor3 getDebugColor() const; // For AGP debug display  	static S32 sDiffTex; - -private: -	void renderTree(BOOL selecting = FALSE);  };  #endif // LL_LLDRAWPOOLTREE_H diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 4d8d6d9a8c..64bdcccd9f 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -1014,38 +1014,38 @@ void LLFloaterModelPreview::onPhysicsBrowse(LLUICtrl* ctrl, void* userdata)  //static  void LLFloaterModelPreview::onPhysicsUseLOD(LLUICtrl* ctrl, void* userdata)  { -	S32 num_modes = 4; -	S32 which_mode = 3; -	static S32 previous_mode = which_mode; +	S32 num_lods = 4; +	S32 which_mode;  	LLCtrlSelectionInterface* iface = sInstance->childGetSelectionInterface("physics_lod_combo");  	if (iface)  	{  		which_mode = iface->getFirstSelectedIndex();  	} +	else +	{ +		llwarns << "no iface" << llendl; +		return; +	} -	S32 file_mode = iface->getItemCount() - 1; -	bool file_browse = which_mode == file_mode; -	bool lod_to_file = file_browse && (previous_mode != file_mode); -	bool file_to_lod = !file_browse && (previous_mode == file_mode); - -	if (!lod_to_file) +	if (which_mode <= 0)  	{ -		which_mode = num_modes - which_mode; -		sInstance->mModelPreview->setPhysicsFromLOD(which_mode); +		llwarns << "which_mode out of range, " << which_mode << llendl;  	} -	if (lod_to_file || file_to_lod) +	S32 file_mode = iface->getItemCount() - 1; +	if (which_mode < file_mode)  	{ -		LLModelPreview *model_preview = sInstance->mModelPreview; -		if (model_preview) -		{ -			model_preview->refresh(); -			model_preview->updateStatusMessages(); -		} +		S32 which_lod = num_lods - which_mode; +		sInstance->mModelPreview->setPhysicsFromLOD(which_lod);  	} -	previous_mode = which_mode; +	LLModelPreview *model_preview = sInstance->mModelPreview; +	if (model_preview) +	{ +		model_preview->refresh(); +		model_preview->updateStatusMessages(); +	}  }  //static  diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index cfa35fa561..1b3290d5a8 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -100,9 +100,6 @@ S32 BORDER_WIDTH = 6;  const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte  const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512 -static std::string lastSnapshotWidthName(S32 shot_type); -static std::string lastSnapshotHeightName(S32 shot_type); -  static LLDefaultChildRegistry::Register<LLSnapshotFloaterView> r("snapshot_floater_view");  ///---------------------------------------------------------------------------- @@ -138,7 +135,11 @@ public:  	/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);  	void setSize(S32 w, S32 h); +	void setWidth(S32 w) { mWidth[mCurImageIndex] = w; } +	void setHeight(S32 h) { mHeight[mCurImageIndex] = h; }  	void getSize(S32& w, S32& h) const; +	S32 getWidth() const { return mWidth[mCurImageIndex]; } +	S32 getHeight() const { return mHeight[mCurImageIndex]; }  	S32 getDataSize() const { return mDataSize; }  	void setMaxImageSize(S32 size) ;  	S32  getMaxImageSize() {return mMaxImageSize ;} @@ -155,8 +156,9 @@ public:  	LLViewerTexture* getCurrentImage();  	F32 getImageAspect();  	F32 getAspect() ; -	LLRect getImageRect(); -	BOOL isImageScaled(); +	const LLRect& getImageRect() const { return mImageRect[mCurImageIndex]; } +	BOOL isImageScaled() const { return mImageScaled[mCurImageIndex]; } +	void setImageScaled(BOOL scaled) { mImageScaled[mCurImageIndex] = scaled; }  	const LLVector3d& getPosTakenGlobal() const { return mPosTakenGlobal; }  	void setSnapshotType(ESnapshotType type) { mSnapshotType = type; } @@ -171,6 +173,7 @@ public:  	LLPointer<LLImageFormatted>	getFormattedImage() const { return mFormattedImage; }  	LLPointer<LLImageRaw>		getEncodedImage() const { return mPreviewImageEncoded; } +	/// Sets size of preview thumbnail image and thhe surrounding rect.  	BOOL setThumbnailImageSize() ;  	void generateThumbnailImage(BOOL force_update = FALSE) ;  	void resetThumbnailImage() { mThumbnailImage = NULL ; } @@ -299,7 +302,7 @@ LLViewerTexture* LLSnapshotLivePreview::getCurrentImage()  F32 LLSnapshotLivePreview::getAspect()  { -	F32 image_aspect_ratio = ((F32)mWidth[mCurImageIndex]) / ((F32)mHeight[mCurImageIndex]); +	F32 image_aspect_ratio = ((F32)getWidth()) / ((F32)getHeight());  	F32 window_aspect_ratio = ((F32)getRect().getWidth()) / ((F32)getRect().getHeight());  	if (!mKeepAspectRatio)//gSavedSettings.getBOOL("KeepAspectForSnapshot")) @@ -314,7 +317,7 @@ F32 LLSnapshotLivePreview::getAspect()  F32 LLSnapshotLivePreview::getImageAspect()  { -	if (!mViewerImage[mCurImageIndex]) +	if (!getCurrentImage())  	{  		return 0.f;  	} @@ -322,33 +325,25 @@ F32 LLSnapshotLivePreview::getImageAspect()  	return getAspect() ;	  } -LLRect LLSnapshotLivePreview::getImageRect() -{ -	return mImageRect[mCurImageIndex]; -} - -BOOL LLSnapshotLivePreview::isImageScaled() -{ -	return mImageScaled[mCurImageIndex]; -} -  void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail, F32 delay)   { -	lldebugs << "updateSnapshot: mSnapshotUpToDate = " << mSnapshotUpToDate << llendl; -	if (mSnapshotUpToDate) +	// Invalidate current image. +	lldebugs << "updateSnapshot: mSnapshotUpToDate = " << getSnapshotUpToDate() << llendl; +	if (getSnapshotUpToDate())  	{  		S32 old_image_index = mCurImageIndex;  		mCurImageIndex = (mCurImageIndex + 1) % 2;  -		mWidth[mCurImageIndex] = mWidth[old_image_index]; -		mHeight[mCurImageIndex] = mHeight[old_image_index]; +		setWidth(mWidth[old_image_index]); +		setHeight(mHeight[old_image_index]);  		mFallAnimTimer.start();		  	}  	mSnapshotUpToDate = FALSE; 		 +	// Update snapshot source rect depending on whether we keep the aspect ratio.  	LLRect& rect = mImageRect[mCurImageIndex];  	rect.set(0, getRect().getHeight(), getRect().getWidth(), 0); -	F32 image_aspect_ratio = ((F32)mWidth[mCurImageIndex]) / ((F32)mHeight[mCurImageIndex]); +	F32 image_aspect_ratio = ((F32)getWidth()) / ((F32)getHeight());  	F32 window_aspect_ratio = ((F32)getRect().getWidth()) / ((F32)getRect().getHeight());  	if (mKeepAspectRatio)//gSavedSettings.getBOOL("KeepAspectForSnapshot")) @@ -369,13 +364,18 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail  		}  	} +	// Stop shining animation.  	mShineAnimTimer.stop(); + +	// Update snapshot if requested.  	if (new_snapshot)  	{  		mSnapshotDelayTimer.start();  		mSnapshotDelayTimer.setTimerExpirySec(delay);  		LLFloaterSnapshot::preUpdate();  	} + +	// Update thumbnail if requested.  	if(new_thumbnail)  	{  		mThumbnailUpToDate = FALSE ; @@ -435,23 +435,23 @@ void LLSnapshotLivePreview::drawPreviewRect(S32 offset_x, S32 offset_y)  //called when the frame is frozen.  void LLSnapshotLivePreview::draw()  { -	if (mViewerImage[mCurImageIndex].notNull() && +	if (getCurrentImage() &&  	    mPreviewImageEncoded.notNull() && -	    mSnapshotUpToDate) +	    getSnapshotUpToDate())  	{  		LLColor4 bg_color(0.f, 0.f, 0.3f, 0.4f);  		gl_rect_2d(getRect(), bg_color); -		LLRect &rect = mImageRect[mCurImageIndex]; -		LLRect shadow_rect = mImageRect[mCurImageIndex]; +		const LLRect& rect = getImageRect(); +		LLRect shadow_rect = rect;  		shadow_rect.stretch(BORDER_WIDTH);  		gl_drop_shadow(shadow_rect.mLeft, shadow_rect.mTop, shadow_rect.mRight, shadow_rect.mBottom, LLColor4(0.f, 0.f, 0.f, mNeedsFlash ? 0.f :0.5f), 10);  		LLColor4 image_color(1.f, 1.f, 1.f, 1.f);  		gGL.color4fv(image_color.mV); -		gGL.getTexUnit(0)->bind(mViewerImage[mCurImageIndex]); +		gGL.getTexUnit(0)->bind(getCurrentImage());  		// calculate UV scale -		F32 uv_width = mImageScaled[mCurImageIndex] ? 1.f : llmin((F32)mWidth[mCurImageIndex] / (F32)mViewerImage[mCurImageIndex]->getWidth(), 1.f); -		F32 uv_height = mImageScaled[mCurImageIndex] ? 1.f : llmin((F32)mHeight[mCurImageIndex] / (F32)mViewerImage[mCurImageIndex]->getHeight(), 1.f); +		F32 uv_width = isImageScaled() ? 1.f : llmin((F32)getWidth() / (F32)getCurrentImage()->getWidth(), 1.f); +		F32 uv_height = isImageScaled() ? 1.f : llmin((F32)getHeight() / (F32)getCurrentImage()->getHeight(), 1.f);  		gGL.pushMatrix();  		{  			gGL.translatef((F32)rect.mLeft, (F32)rect.mBottom, 0.f); @@ -491,6 +491,7 @@ void LLSnapshotLivePreview::draw()  			mFlashAlpha = lerp(mFlashAlpha, 0.f, LLCriticalDamp::getInterpolant(0.15f));  		} +		// Draw shining animation if appropriate.  		if (mShineCountdown > 0)  		{  			mShineCountdown--; @@ -501,6 +502,7 @@ void LLSnapshotLivePreview::draw()  		}  		else if (mShineAnimTimer.getStarted())  		{ +			lldebugs << "Drawing shining animation" << llendl;  			F32 shine_interp = llmin(1.f, mShineAnimTimer.getElapsedTimeF32() / SHINE_TIME);  			// draw "shine" effect @@ -545,7 +547,7 @@ void LLSnapshotLivePreview::draw()  	{  		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);  		gGL.color4f(1.f, 1.f, 1.f, 1.f); -		LLRect outline_rect = mImageRect[mCurImageIndex]; +		const LLRect& outline_rect = getImageRect();  		gGL.begin(LLRender::QUADS);  		{  			gGL.vertex2i(outline_rect.mLeft - BORDER_WIDTH, outline_rect.mTop + BORDER_WIDTH); @@ -577,6 +579,7 @@ void LLSnapshotLivePreview::draw()  		S32 old_image_index = (mCurImageIndex + 1) % 2;  		if (mViewerImage[old_image_index].notNull() && mFallAnimTimer.getElapsedTimeF32() < FALL_TIME)  		{ +			lldebugs << "Drawing fall animation" << llendl;  			F32 fall_interp = mFallAnimTimer.getElapsedTimeF32() / FALL_TIME;  			F32 alpha = clamp_rescale(fall_interp, 0.f, 1.f, 0.8f, 0.4f);  			LLColor4 image_color(1.f, 1.f, 1.f, alpha); @@ -620,13 +623,14 @@ void LLSnapshotLivePreview::reshape(S32 width, S32 height, BOOL called_from_pare  	LLView::reshape(width, height, called_from_parent);  	if (old_rect.getWidth() != width || old_rect.getHeight() != height)  	{ +		lldebugs << "window reshaped, updating thumbnail" << llendl;  		updateSnapshot(FALSE, TRUE);  	}  }  BOOL LLSnapshotLivePreview::setThumbnailImageSize()  { -	if(mWidth[mCurImageIndex] < 10 || mHeight[mCurImageIndex] < 10) +	if(getWidth() < 10 || getHeight() < 10)  	{  		return FALSE ;  	} @@ -662,11 +666,11 @@ BOOL LLSnapshotLivePreview::setThumbnailImageSize()  	S32 left = 0 , top = mThumbnailHeight, right = mThumbnailWidth, bottom = 0 ;  	if(!mKeepAspectRatio)  	{ -		F32 ratio_x = (F32)mWidth[mCurImageIndex] / window_width ; -		F32 ratio_y = (F32)mHeight[mCurImageIndex] / window_height ; +		F32 ratio_x = (F32)getWidth() / window_width ; +		F32 ratio_y = (F32)getHeight() / window_height ; -		//if(mWidth[mCurImageIndex] > window_width || -		//	mHeight[mCurImageIndex] > window_height ) +		//if(getWidth() > window_width || +		//	getHeight() > window_height )  		{  			if(ratio_x > ratio_y)  			{ @@ -698,11 +702,11 @@ void LLSnapshotLivePreview::generateThumbnailImage(BOOL force_update)  	{  		return ;  	} -	if(mThumbnailUpToDate && !force_update)//already updated +	if(getThumbnailUpToDate() && !force_update)//already updated  	{  		return ;  	} -	if(mWidth[mCurImageIndex] < 10 || mHeight[mCurImageIndex] < 10) +	if(getWidth() < 10 || getHeight() < 10)  	{  		return ;  	} @@ -750,15 +754,13 @@ void LLSnapshotLivePreview::generateThumbnailImage(BOOL force_update)  BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  {  	LLSnapshotLivePreview* previewp = (LLSnapshotLivePreview*)snapshot_preview; - -#if 1 // XXX tmp -	if (previewp->mWidth[previewp->mCurImageIndex] == 0 || previewp->mHeight[previewp->mCurImageIndex] == 0) +	if (previewp->getWidth() == 0 || previewp->getHeight() == 0)  	{ -		llwarns << "Incorrect dimensions: " << previewp->mWidth[previewp->mCurImageIndex] << "x" << previewp->mHeight[previewp->mCurImageIndex] << llendl; +		llwarns << "Incorrect dimensions: " << previewp->getWidth() << "x" << previewp->getHeight() << llendl;  		return FALSE;  	} -#endif +	// If we're in freeze-frame mode and camera has moved, update snapshot.  	LLVector3 new_camera_pos = LLViewerCamera::getInstance()->getOrigin();  	LLQuaternion new_camera_rot = LLViewerCamera::getInstance()->getQuaternion();  	if (gSavedSettings.getBOOL("FreezeTime") &&  @@ -768,6 +770,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  		previewp->mCameraRot = new_camera_rot;  		// request a new snapshot whenever the camera moves, with a time delay  		BOOL autosnap = gSavedSettings.getBOOL("AutoSnapshot"); +		lldebugs << "camera moved, updating thumbnail" << llendl;  		previewp->updateSnapshot(  			autosnap, // whether a new snapshot is needed or merely invalidate the existing one  			FALSE, // or if 1st arg is false, whether to produce a new thumbnail image. @@ -801,13 +804,13 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  	previewp->setEnabled(FALSE);  	previewp->getWindow()->incBusyCount(); -	previewp->mImageScaled[previewp->mCurImageIndex] = FALSE; +	previewp->setImageScaled(FALSE);  	// grab the raw image and encode it into desired format  	if(gViewerWindow->rawSnapshot(  							previewp->mPreviewImage, -							previewp->mWidth[previewp->mCurImageIndex], -							previewp->mHeight[previewp->mCurImageIndex], +							previewp->getWidth(), +							previewp->getHeight(),  							previewp->mKeepAspectRatio,//gSavedSettings.getBOOL("KeepAspectForSnapshot"),  							previewp->getSnapshotType() == LLSnapshotLivePreview::SNAPSHOT_TEXTURE,  							gSavedSettings.getBOOL("RenderUIInSnapshot"), @@ -831,7 +834,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  				previewp->mPreviewImage->getComponents());  			scaled->biasedScaleToPowerOfTwo(512); -			previewp->mImageScaled[previewp->mCurImageIndex] = TRUE; +			previewp->setImageScaled(TRUE);  			if (formatted->encode(scaled, 0.f))  			{  				previewp->mDataSize = formatted->getDataSize(); @@ -886,7 +889,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  			{  				// go ahead and shrink image to appropriate power of 2 for display  				scaled->biasedScaleToPowerOfTwo(1024); -				previewp->mImageScaled[previewp->mCurImageIndex] = TRUE; +				previewp->setImageScaled(TRUE);  			}  			else  			{ @@ -933,14 +936,14 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  void LLSnapshotLivePreview::setSize(S32 w, S32 h)  {  	lldebugs << "setSize(" << w << ", " << h << ")" << llendl; -	mWidth[mCurImageIndex] = w; -	mHeight[mCurImageIndex] = h; +	setWidth(w); +	setHeight(h);  }  void LLSnapshotLivePreview::getSize(S32& w, S32& h) const  { -	w = mWidth[mCurImageIndex]; -	h = mHeight[mCurImageIndex]; +	w = getWidth(); +	h = getHeight();  }  void LLSnapshotLivePreview::saveTexture() @@ -959,7 +962,7 @@ void LLSnapshotLivePreview::saveTexture()  	scaled->biasedScaleToPowerOfTwo(512);  	lldebugs << "scaled texture to " << scaled->getWidth() << "x" << scaled->getHeight() << llendl; -			 +  	if (formatted->encode(scaled, 0.0f))  	{  		LLVFile::writeFile(formatted->getData(), formatted->getDataSize(), gVFS, new_asset_id, LLAssetType::AT_TEXTURE); @@ -1068,24 +1071,18 @@ public:  	static void onClickMore(void* data) ;  	static void onClickUICheck(LLUICtrl *ctrl, void* data);  	static void onClickHUDCheck(LLUICtrl *ctrl, void* data); -#if 0 -	static void onClickKeepAspectCheck(LLUICtrl *ctrl, void* data); -#endif  	static void applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL checked);  	static void updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update = TRUE);  	static void onCommitFreezeFrame(LLUICtrl* ctrl, void* data);  	static void onCommitLayerTypes(LLUICtrl* ctrl, void*data);  	static void onImageQualityChange(LLFloaterSnapshot* view, S32 quality_val);  	static void onImageFormatChange(LLFloaterSnapshot* view); -#if 0 -	static void onCommitSnapshotType(LLUICtrl* ctrl, void* data); -	static void onCommitCustomResolution(LLUICtrl *ctrl, void* data); -#endif  	static void applyCustomResolution(LLFloaterSnapshot* view, S32 w, S32 h);  	static void onSnapshotUploadFinished(bool status);  	static void onSendingPostcardFinished(bool status); -	static void resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32 width, S32 height) ;  	static BOOL checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value); +	static void setImageSizeSpinnersValues(LLFloaterSnapshot *view, S32 width, S32 height) ; +	static void updateSpinners(LLFloaterSnapshot* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed);  	static LLPanelSnapshot* getActivePanel(LLFloaterSnapshot* floater, bool ok_if_not_found = true);  	static LLSnapshotLivePreview::ESnapshotType getActiveSnapshotType(LLFloaterSnapshot* floater); @@ -1256,16 +1253,9 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)  		previewp->mKeepAspectRatio = TRUE;  		floaterp->getChild<LLComboBox>("profile_size_combo")->setCurrentByIndex(0); -		gSavedSettings.setS32("SnapshotProfileLastResolution", 0); -  		floaterp->getChild<LLComboBox>("postcard_size_combo")->setCurrentByIndex(0); -		gSavedSettings.setS32("SnapshotPostcardLastResolution", 0); -  		floaterp->getChild<LLComboBox>("texture_size_combo")->setCurrentByIndex(0); -		gSavedSettings.setS32("SnapshotTextureLastResolution", 0); -  		floaterp->getChild<LLComboBox>("local_size_combo")->setCurrentByIndex(0); -		gSavedSettings.setS32("SnapshotLocalLastResolution", 0);  		LLSnapshotLivePreview* previewp = getPreviewView(floaterp);  		previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); @@ -1349,19 +1339,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)  	floater->getChildView("share_to_web")->setVisible( gSavedSettings.getBOOL("SnapshotSharingEnabled"));  #endif -#if 0 -	floater->getChildView("postcard_size_combo")->setVisible( FALSE); -	floater->getChildView("texture_size_combo")->setVisible( FALSE); -	floater->getChildView("local_size_combo")->setVisible( FALSE); -#endif - -	floater->getChild<LLComboBox>("profile_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotProfileLastResolution")); -	floater->getChild<LLComboBox>("postcard_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotPostcardLastResolution")); -	floater->getChild<LLComboBox>("texture_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotTextureLastResolution")); -	floater->getChild<LLComboBox>("local_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotLocalLastResolution"));  	floater->getChild<LLComboBox>("local_format_combo")->selectNthItem(gSavedSettings.getS32("SnapshotFormat")); - -	// *TODO: Separate settings for Web images from postcards  	enableAspectRatioCheckbox(floater, !floater->impl.mAspectRatioCheckOff);  	setAspectRatioCheckboxValue(floater, gSavedSettings.getBOOL("KeepAspectForSnapshot"));  	floater->getChildView("layer_types")->setEnabled(shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL); @@ -1375,19 +1353,20 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)  		// Initialize spinners.  		if (width_ctrl->getValue().asInteger() == 0)  		{ -			S32 w = gSavedSettings.getS32(lastSnapshotWidthName(shot_type)); +			S32 w = gViewerWindow->getWindowWidthRaw();  			lldebugs << "Initializing width spinner (" << width_ctrl->getName() << "): " << w << llendl;  			width_ctrl->setValue(w);  		}  		if (height_ctrl->getValue().asInteger() == 0)  		{ -			S32 h = gSavedSettings.getS32(lastSnapshotHeightName(shot_type)); +			S32 h = gViewerWindow->getWindowHeightRaw();  			lldebugs << "Initializing height spinner (" << height_ctrl->getName() << "): " << h << llendl;  			height_ctrl->setValue(h);  		} +		// Сlamp snapshot resolution to window size when showing UI or HUD in snapshot.  		if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot")) -		{ //clamp snapshot resolution to window size when showing UI or HUD in snapshot +		{  			S32 width = gViewerWindow->getWindowWidthRaw();  			S32 height = gViewerWindow->getWindowHeightRaw(); @@ -1416,7 +1395,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)  	BOOL got_snap = previewp && previewp->getSnapshotUpToDate();  	// *TODO: Separate maximum size for Web images from postcards -	//lldebugs << "Is snapshot up-to-date? " << got_snap << llendl; +	lldebugs << "Is snapshot up-to-date? " << got_snap << llendl;  	LLLocale locale(LLLocale::USER_LOCALE);  	std::string bytes_string; @@ -1441,6 +1420,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)  		&& got_bytes  		&& previewp->getDataSize() > MAX_POSTCARD_DATASIZE ? LLUIColor(LLColor4::red) : LLUIColorTable::instance().getColor( "LabelTextColor" )); +	// Update the width and height spinners based on the corresponding resolution combos. (?)  	switch(shot_type)  	{  	  case LLSnapshotLivePreview::SNAPSHOT_WEB: @@ -1520,6 +1500,7 @@ void LLFloaterSnapshot::Impl::checkAutoSnapshot(LLSnapshotLivePreview* previewp,  	if (previewp)  	{  		BOOL autosnap = gSavedSettings.getBOOL("AutoSnapshot"); +		lldebugs << "updating " << (autosnap ? "snapshot" : "thumbnail") << llendl;  		previewp->updateSnapshot(autosnap, update_thumbnail, autosnap ? AUTO_SNAPSHOT_TIME_DELAY : 0.f);  	}  } @@ -1532,6 +1513,7 @@ void LLFloaterSnapshot::Impl::onClickNewSnapshot(void* data)  	if (previewp && view)  	{  		view->impl.setStatus(Impl::STATUS_READY); +		lldebugs << "updating snapshot" << llendl;  		previewp->updateSnapshot(TRUE);  	}  } @@ -1559,17 +1541,8 @@ void LLFloaterSnapshot::Impl::onClickMore(void* data)  	{  		view->impl.setStatus(Impl::STATUS_READY);  		gSavedSettings.setBOOL("AdvanceSnapshot", !visible); -#if 0 -		view->translate( 0, view->getUIWinHeightShort() - view->getUIWinHeightLong() ); -		view->reshape(view->getRect().getWidth(), view->getUIWinHeightLong()); -#endif  		updateControls(view) ;  		updateLayout(view) ; -		// *TODO: redundant? -		if(getPreviewView(view)) -		{ -			getPreviewView(view)->setThumbnailImageSize() ; -		}  	}  } @@ -1601,16 +1574,6 @@ void LLFloaterSnapshot::Impl::onClickHUDCheck(LLUICtrl *ctrl, void* data)  	}  } -#if 0 -// static -void LLFloaterSnapshot::Impl::onClickKeepAspectCheck(LLUICtrl* ctrl, void* data) -{ -	LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl; -	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; -	applyKeepAspectCheck(view, check->get()); -} -#endif -  // static  void LLFloaterSnapshot::Impl::applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL checked)  { @@ -1625,11 +1588,9 @@ void LLFloaterSnapshot::Impl::applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL  			S32 w, h ;  			previewp->getSize(w, h) ; -			if(checkImageSize(previewp, w, h, TRUE, previewp->getMaxImageSize())) -			{ -				resetSnapshotSizeOnUI(view, w, h) ; -			} +			updateSpinners(view, previewp, w, h, TRUE); // may change w and h +			lldebugs << "updating thumbnail" << llendl;  			previewp->setSize(w, h) ;  			previewp->updateSnapshot(FALSE, TRUE);  			checkAutoSnapshot(previewp, TRUE); @@ -1664,39 +1625,31 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde  		previewp->mKeepAspectRatio = FALSE ;  		return ;  	} -	 -	if(0 == index) //current window size -	{ -		view->impl.mAspectRatioCheckOff = true ; -		enableAspectRatioCheckbox(view, FALSE); -		if(previewp) -		{ -			previewp->mKeepAspectRatio = TRUE ; -		} +	BOOL keep_aspect = FALSE, enable_cb = FALSE; + +	if (0 == index) // current window size +	{ +		enable_cb = FALSE; +		keep_aspect = TRUE;  	} -	else if(-1 == index) //custom +	else if (-1 == index) // custom  	{ -		view->impl.mAspectRatioCheckOff = false ; -		enableAspectRatioCheckbox(view, TRUE); - -		if(previewp) -		{ -			previewp->mKeepAspectRatio = gSavedSettings.getBOOL("KeepAspectForSnapshot") ; -		} +		enable_cb = TRUE; +		keep_aspect = gSavedSettings.getBOOL("KeepAspectForSnapshot");  	} -	else +	else // predefined resolution  	{ -		view->impl.mAspectRatioCheckOff = true ; -		enableAspectRatioCheckbox(view, FALSE); - -		if(previewp) -		{ -			previewp->mKeepAspectRatio = FALSE ; -		} +		enable_cb = FALSE; +		keep_aspect = FALSE;  	} -	return ; +	view->impl.mAspectRatioCheckOff = !enable_cb; +	enableAspectRatioCheckbox(view, enable_cb); +	if (previewp) +	{ +		previewp->mKeepAspectRatio = keep_aspect; +	}  }  // Show/hide upload progress indicators. @@ -1743,27 +1696,6 @@ void LLFloaterSnapshot::Impl::setFinished(LLFloaterSnapshot* floater, bool finis  	}  } -static std::string lastSnapshotWidthName(S32 shot_type) -{ -	switch (shot_type) -	{ -	  case LLSnapshotLivePreview::SNAPSHOT_WEB:		 return "LastSnapshotToProfileWidth"; -	  case LLSnapshotLivePreview::SNAPSHOT_POSTCARD: return "LastSnapshotToEmailWidth"; -	  case LLSnapshotLivePreview::SNAPSHOT_TEXTURE:  return "LastSnapshotToInventoryWidth"; -	  default:                                       return "LastSnapshotToDiskWidth"; -	} -} -static std::string lastSnapshotHeightName(S32 shot_type) -{ -	switch (shot_type) -	{ -	  case LLSnapshotLivePreview::SNAPSHOT_WEB:	     return "LastSnapshotToProfileHeight"; -	  case LLSnapshotLivePreview::SNAPSHOT_POSTCARD: return "LastSnapshotToEmailHeight"; -	  case LLSnapshotLivePreview::SNAPSHOT_TEXTURE:  return "LastSnapshotToInventoryHeight"; -	  default:                                       return "LastSnapshotToDiskHeight"; -	} -} -  // static  void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update)  { @@ -1776,12 +1708,6 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  		return;  	} -	// save off all selected resolution values -	gSavedSettings.setS32("SnapshotProfileLastResolution",  view->getChild<LLComboBox>("profile_size_combo")->getCurrentIndex()); -	gSavedSettings.setS32("SnapshotPostcardLastResolution", view->getChild<LLComboBox>("postcard_size_combo")->getCurrentIndex()); -	gSavedSettings.setS32("SnapshotTextureLastResolution",  view->getChild<LLComboBox>("texture_size_combo")->getCurrentIndex()); -	gSavedSettings.setS32("SnapshotLocalLastResolution",    view->getChild<LLComboBox>("local_size_combo")->getCurrentIndex()); -  	std::string sdstring = combobox->getSelectedValue();  	LLSD sdres;  	std::stringstream sstream(sdstring); @@ -1805,7 +1731,6 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  		else if (width == -1 || height == -1)  		{  			// load last custom value -#if 1  			S32 new_width = 0, new_height = 0;  			LLPanelSnapshot* spanel = getActivePanel(view);  			if (spanel) @@ -1816,23 +1741,14 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  			}  			else  			{ -				const S32 shot_type = getActiveSnapshotType(view); -				lldebugs << "Loading saved res for shot_type " << shot_type << llendl; -				new_width = gSavedSettings.getS32(lastSnapshotWidthName(shot_type)); -				new_height = gSavedSettings.getS32(lastSnapshotHeightName(shot_type)); +				lldebugs << "No custom res chosen, setting preview res from window: " +					<< gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl; +				new_width = gViewerWindow->getWindowWidthRaw(); +				new_height = gViewerWindow->getWindowHeightRaw();  			}  			llassert(new_width > 0 && new_height > 0);  			previewp->setSize(new_width, new_height); -#else -			LLPanelSnapshot* spanel = getActivePanel(view); -			if (spanel) -			{ -				lldebugs << "Setting custom preview res : " << spanel->getTypedPreviewWidth() << "x" << spanel->getTypedPreviewHeight() << llendl; -				previewp->setSize(spanel->getTypedPreviewWidth(), spanel->getTypedPreviewHeight()); -			} -			//previewp->setSize(gSavedSettings.getS32(lastSnapshotWidthName()), gSavedSettings.getS32(lastSnapshotHeightName())); -#endif  		}  		else  		{ @@ -1851,11 +1767,7 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  			height = llmin(height, gViewerWindow->getWindowHeightRaw());  		} -		 -		if(checkImageSize(previewp, width, height, TRUE, previewp->getMaxImageSize())) -		{ -			resetSnapshotSizeOnUI(view, width, height) ; -		} +		updateSpinners(view, previewp, width, height, TRUE); // may change width and height  		if(getWidthSpinner(view)->getValue().asInteger() != width || getHeightSpinner(view)->getValue().asInteger() != height)  		{ @@ -1869,9 +1781,11 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  			// hide old preview as the aspect ratio could be wrong  			checkAutoSnapshot(previewp, FALSE); +			lldebugs << "updating thumbnail" << llendl;  			getPreviewView(view)->updateSnapshot(FALSE, TRUE);  			if(do_update)  			{ +				lldebugs << "Will update controls" << llendl;  				updateControls(view);  				setNeedRefresh(view, true);  			} @@ -1914,93 +1828,29 @@ void LLFloaterSnapshot::Impl::onImageFormatChange(LLFloaterSnapshot* view)  	if (view)  	{  		gSavedSettings.setS32("SnapshotFormat", getImageFormat(view)); +		lldebugs << "image format changed, updating snapshot" << llendl;  		getPreviewView(view)->updateSnapshot(TRUE);  		updateControls(view);  		setNeedRefresh(view, false); // we're refreshing  	}  } -#if 0 -//static  -void LLFloaterSnapshot::Impl::onCommitSnapshotType(LLUICtrl* ctrl, void* data) -{ -	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;		 -	if (view) -	{ -		gSavedSettings.setS32("LastSnapshotType", getTypeIndex(view)); -		getPreviewView(view)->updateSnapshot(TRUE); -		updateControls(view); -	} -} -#endif -  // Sets the named size combo to "custom" mode.  // static  void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const std::string& comboname)  {  	LLComboBox* combo = floater->getChild<LLComboBox>(comboname); -  	combo->setCurrentByIndex(combo->getItemCount() - 1); // "custom" is always the last index - -	if(comboname == "postcard_size_combo")  -	{ -		gSavedSettings.setS32("SnapshotPostcardLastResolution", combo->getCurrentIndex()); -	} -	else if(comboname == "profile_size_combo") -	{ -		gSavedSettings.setS32("SnapshotProfileLastResolution", combo->getCurrentIndex()); -	} -	else if(comboname == "texture_size_combo")  -	{ -		gSavedSettings.setS32("SnapshotTextureLastResolution", combo->getCurrentIndex()); -	} -	else if(comboname == "local_size_combo")  -	{ -		gSavedSettings.setS32("SnapshotLocalLastResolution", combo->getCurrentIndex()); -	} -  	checkAspectRatio(floater, -1); // -1 means custom  } - - +// Update supplied width and height according to the constrain proportions flag; limit them by max_val.  //static  BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value)  {  	S32 w = width ;  	S32 h = height ; -	//if texture, ignore aspect ratio setting, round image size to power of 2. -#if 0 // Don't round texture sizes; textures are commonly stretched in world, profiles, etc and need to be "squashed" during upload, not cropped here -	if(LLSnapshotLivePreview::SNAPSHOT_TEXTURE == gSavedSettings.getS32("LastSnapshotType")) -	{ -		if(width > max_value) -		{ -			width = max_value ; -		} -		if(height > max_value) -		{ -			height = max_value ; -		} - -		//round to nearest power of 2 based on the direction of movement -		// i.e. higher power of two if increasing texture resolution -		if(gSavedSettings.getS32("LastSnapshotToInventoryWidth") < width || -			gSavedSettings.getS32("LastSnapshotToInventoryHeight") < height) -		{ -			// Up arrow pressed -			width = get_next_power_two(width, MAX_TEXTURE_SIZE) ; -			height = get_next_power_two(height, MAX_TEXTURE_SIZE) ; -		} -		else -		{ -			// Down or no change -			width = get_lower_power_two(width, MAX_TEXTURE_SIZE) ; -			height = get_lower_power_two(height, MAX_TEXTURE_SIZE) ; -		} -	} -	else -#endif  	if(previewp && previewp->mKeepAspectRatio)  	{  		if(gViewerWindow->getWindowWidthRaw() < 1 || gViewerWindow->getWindowHeightRaw() < 1) @@ -2036,32 +1886,25 @@ BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S3  			}  		}  	} -	else -	{ -	}  	return (w != width || h != height) ;  }  //static -void LLFloaterSnapshot::Impl::resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32 width, S32 height) +void LLFloaterSnapshot::Impl::setImageSizeSpinnersValues(LLFloaterSnapshot *view, S32 width, S32 height)  {  	getWidthSpinner(view)->forceSetValue(width);  	getHeightSpinner(view)->forceSetValue(height); -	gSavedSettings.setS32(lastSnapshotWidthName(getActiveSnapshotType(view)), width); -	gSavedSettings.setS32(lastSnapshotHeightName(getActiveSnapshotType(view)), height);  } -#if 0 -//static -void LLFloaterSnapshot::Impl::onCommitCustomResolution(LLUICtrl *ctrl, void* data) +// static +void LLFloaterSnapshot::Impl::updateSpinners(LLFloaterSnapshot* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed)  { -	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; -	S32 w = llfloor((F32)getWidthSpinner(view)->getValue().asReal()); -	S32 h = llfloor((F32)getHeightSpinner(view)->getValue().asReal()); -	applyCustomResolution(view, w, h); +	if (checkImageSize(previewp, width, height, is_width_changed, previewp->getMaxImageSize())) +	{ +		setImageSizeSpinnersValues(view, width, height); +	}  } -#endif  // static  void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32 w, S32 h) @@ -2069,68 +1912,38 @@ void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32  	bool need_refresh = false;  	lldebugs << "applyCustomResolution(" << w << ", " << h << ")" << llendl; -	if (view) +	if (!view) return; + +	LLSnapshotLivePreview* previewp = getPreviewView(view); +	if (previewp)  	{ -		LLSnapshotLivePreview* previewp = getPreviewView(view); -		if (previewp) -		{ -			S32 curw,curh; -			previewp->getSize(curw, curh); -			 -			if (w != curw || h != curh) -			{ -				BOOL update_ = FALSE ; -				//if to upload a snapshot, process spinner input in a special way. -#if 0  // Don't round texture sizes; textures are commonly stretched in world, profiles, etc and need to be "squashed" during upload, not cropped here -				if(LLSnapshotLivePreview::SNAPSHOT_TEXTURE == gSavedSettings.getS32("LastSnapshotType")) -				{ -					S32 spinner_increment = (S32)((LLSpinCtrl*)ctrl)->getIncrement() ; -					S32 dw = w - curw ; -					S32 dh = h - curh ; -					dw = (dw == spinner_increment) ? 1 : ((dw == -spinner_increment) ? -1 : 0) ; -					dh = (dh == spinner_increment) ? 1 : ((dh == -spinner_increment) ? -1 : 0) ; - -					if(dw) -					{ -						w = (dw > 0) ? curw << dw : curw >> -dw ; -						update_ = TRUE ; -					} -					if(dh) -					{ -						h = (dh > 0) ? curh << dh : curh >> -dh ; -						update_ = TRUE ; -					} -				} -#endif -				previewp->setMaxImageSize((S32) getWidthSpinner(view)->getMaxValue()) ; -				 -				// Check image size changes the value of height and width -				if(checkImageSize(previewp, w, h, w != curw, previewp->getMaxImageSize()) -					|| update_) -				{ -					resetSnapshotSizeOnUI(view, w, h) ; -				} +		S32 curw,curh; +		previewp->getSize(curw, curh); -				previewp->setSize(w,h); -				checkAutoSnapshot(previewp, FALSE); -				previewp->updateSnapshot(FALSE, TRUE); -				comboSetCustom(view, "profile_size_combo"); -				comboSetCustom(view, "postcard_size_combo"); -				comboSetCustom(view, "texture_size_combo"); -				comboSetCustom(view, "local_size_combo"); -				need_refresh = true; -			} -		} +		if (w != curw || h != curh) +		{ +			//if to upload a snapshot, process spinner input in a special way. +			previewp->setMaxImageSize((S32) getWidthSpinner(view)->getMaxValue()) ; -		gSavedSettings.setS32(lastSnapshotWidthName(getActiveSnapshotType(view)), w); -		gSavedSettings.setS32(lastSnapshotHeightName(getActiveSnapshotType(view)), h); +			updateSpinners(view, previewp, w, h, w != curw); // may change w and h -		updateControls(view); -		if (need_refresh) -		{ -			setNeedRefresh(view, true); // need to do this after updateControls() +			previewp->setSize(w,h); +			checkAutoSnapshot(previewp, FALSE); +			lldebugs << "applied custom resolution, updating thumbnail" << llendl; +			previewp->updateSnapshot(FALSE, TRUE); +			comboSetCustom(view, "profile_size_combo"); +			comboSetCustom(view, "postcard_size_combo"); +			comboSetCustom(view, "texture_size_combo"); +			comboSetCustom(view, "local_size_combo"); +			need_refresh = true;  		}  	} + +	updateControls(view); +	if (need_refresh) +	{ +		setNeedRefresh(view, true); // need to do this after updateControls() +	}  }  // static @@ -2186,10 +1999,6 @@ BOOL LLFloaterSnapshot::postBuild()  		LLWebSharing::instance().init();  	} -#if 0 -	childSetCommitCallback("snapshot_type_radio", Impl::onCommitSnapshotType, this); -#endif -	  	mRefreshBtn = getChild<LLUICtrl>("new_snapshot_btn");  	childSetAction("new_snapshot_btn", Impl::onClickNewSnapshot, this);  	mRefreshLabel = getChild<LLUICtrl>("refresh_lbl"); @@ -2198,31 +2007,18 @@ BOOL LLFloaterSnapshot::postBuild()  	childSetAction("advanced_options_btn", Impl::onClickMore, this); -#if 0 -	childSetCommitCallback("snapshot_width", Impl::onCommitCustomResolution, this); -	childSetCommitCallback("snapshot_height", Impl::onCommitCustomResolution, this); -#endif -  	childSetCommitCallback("ui_check", Impl::onClickUICheck, this);  	getChild<LLUICtrl>("ui_check")->setValue(gSavedSettings.getBOOL("RenderUIInSnapshot"));  	childSetCommitCallback("hud_check", Impl::onClickHUDCheck, this);  	getChild<LLUICtrl>("hud_check")->setValue(gSavedSettings.getBOOL("RenderHUDInSnapshot")); -#if 0 -	childSetCommitCallback("keep_aspect_check", Impl::onClickKeepAspectCheck, this); -#endif  	impl.setAspectRatioCheckboxValue(this, gSavedSettings.getBOOL("KeepAspectForSnapshot"));  	childSetCommitCallback("layer_types", Impl::onCommitLayerTypes, this);  	getChild<LLUICtrl>("layer_types")->setValue("colors");  	getChildView("layer_types")->setEnabled(FALSE); -#if 0 // leads to crash later if one of the settings values is 0 -	impl.getWidthSpinner(this)->setValue(gSavedSettings.getS32(lastSnapshotWidthName())); -	impl.getHeightSpinner(this)->setValue(gSavedSettings.getS32(lastSnapshotHeightName())); -#endif -  	getChild<LLUICtrl>("freeze_frame_check")->setValue(gSavedSettings.getBOOL("UseFreezeFrame"));  	childSetCommitCallback("freeze_frame_check", Impl::onCommitFreezeFrame, this); @@ -2341,6 +2137,7 @@ void LLFloaterSnapshot::onOpen(const LLSD& key)  	LLSnapshotLivePreview* preview = LLFloaterSnapshot::Impl::getPreviewView(this);  	if(preview)  	{ +		lldebugs << "opened, updating snapshot" << llendl;  		preview->updateSnapshot(TRUE);  	}  	focusFirstItem(FALSE); @@ -2422,6 +2219,7 @@ void LLFloaterSnapshot::update()  		return;  	BOOL changed = FALSE; +	lldebugs << "npreviews: " << LLSnapshotLivePreview::sList.size() << llendl;  	for (std::set<LLSnapshotLivePreview*>::iterator iter = LLSnapshotLivePreview::sList.begin();  		 iter != LLSnapshotLivePreview::sList.end(); ++iter)  	{ @@ -2429,6 +2227,7 @@ void LLFloaterSnapshot::update()  	}  	if(changed)  	{ +		lldebugs << "changed" << llendl;  		inst->impl.updateControls(inst);  	}  } diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index f3beacea4f..3b5c3663fb 100644 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -55,6 +55,15 @@ LLFloaterWebContent::_Params::_Params()  LLFloaterWebContent::LLFloaterWebContent( const Params& params )  :	LLFloater( params ),  	LLInstanceTracker<LLFloaterWebContent, std::string>(params.id()), +	mWebBrowser(NULL), +	mAddressCombo(NULL), +	mSecureLockIcon(NULL), +	mStatusBarText(NULL), +	mStatusBarProgress(NULL), +	mBtnBack(NULL), +	mBtnForward(NULL), +	mBtnReload(NULL), +	mBtnStop(NULL),  	mUUID(params.id()),  	mShowPageTitle(params.show_page_title)  { @@ -74,11 +83,16 @@ BOOL LLFloaterWebContent::postBuild()  	mStatusBarText     = getChild< LLTextBox >( "statusbartext" );  	mStatusBarProgress = getChild<LLProgressBar>("statusbarprogress" ); +	mBtnBack           = getChildView( "back" ); +	mBtnForward        = getChildView( "forward" ); +	mBtnReload         = getChildView( "reload" ); +	mBtnStop           = getChildView( "stop" ); +  	// observe browser events  	mWebBrowser->addObserver( this );  	// these buttons are always enabled -	getChildView("reload")->setEnabled( true ); +	mBtnReload->setEnabled( true );  	getChildView("popexternal")->setEnabled( true );  	// cache image for secure browsing @@ -281,8 +295,8 @@ void LLFloaterWebContent::onClose(bool app_quitting)  void LLFloaterWebContent::draw()  {  	// this is asynchronous so we need to keep checking -	getChildView( "back" )->setEnabled( mWebBrowser->canNavigateBack() ); -	getChildView( "forward" )->setEnabled( mWebBrowser->canNavigateForward() ); +	mBtnBack->setEnabled( mWebBrowser->canNavigateBack() ); +	mBtnForward->setEnabled( mWebBrowser->canNavigateForward() );  	LLFloater::draw();  } @@ -302,12 +316,12 @@ void LLFloaterWebContent::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent  	else if(event == MEDIA_EVENT_NAVIGATE_BEGIN)  	{  		// flags are sent with this event -		getChildView("back")->setEnabled( self->getHistoryBackAvailable() ); -		getChildView("forward")->setEnabled( self->getHistoryForwardAvailable() ); +		mBtnBack->setEnabled( self->getHistoryBackAvailable() ); +		mBtnForward->setEnabled( self->getHistoryForwardAvailable() );  		// toggle visibility of these buttons based on browser state -		getChildView("reload")->setVisible( false ); -		getChildView("stop")->setVisible( true ); +		mBtnReload->setVisible( false ); +		mBtnStop->setVisible( true );  		// turn "on" progress bar now we're about to start loading  		mStatusBarProgress->setVisible( true ); @@ -315,12 +329,12 @@ void LLFloaterWebContent::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent  	else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE)  	{  		// flags are sent with this event -		getChildView("back")->setEnabled( self->getHistoryBackAvailable() ); -		getChildView("forward")->setEnabled( self->getHistoryForwardAvailable() ); +		mBtnBack->setEnabled( self->getHistoryBackAvailable() ); +		mBtnForward->setEnabled( self->getHistoryForwardAvailable() );  		// toggle visibility of these buttons based on browser state -		getChildView("reload")->setVisible( true ); -		getChildView("stop")->setVisible( false ); +		mBtnReload->setVisible( true ); +		mBtnStop->setVisible( false );  		// turn "off" progress bar now we're loaded  		mStatusBarProgress->setVisible( false ); @@ -426,8 +440,8 @@ void LLFloaterWebContent::onClickStop()  	// still should happen when we catch the navigate complete event  	// but sometimes (don't know why) that event isn't sent from Qt  	// and we ghetto a point where the stop button stays active. -	getChildView("reload")->setVisible( true ); -	getChildView("stop")->setVisible( false ); +	mBtnReload->setVisible( true ); +	mBtnStop->setVisible( false );  }  void LLFloaterWebContent::onEnterAddress() diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h index 2a2a9e110b..cfc87e9015 100644 --- a/indra/newview/llfloaterwebcontent.h +++ b/indra/newview/llfloaterwebcontent.h @@ -99,6 +99,12 @@ protected:  	LLIconCtrl*		mSecureLockIcon;  	LLTextBox*		mStatusBarText;  	LLProgressBar*	mStatusBarProgress; + +	LLView*			mBtnBack; +	LLView*			mBtnForward; +	LLView*			mBtnReload; +	LLView*			mBtnStop; +  	std::string		mCurrentURL;  	std::string		mUUID;  	bool			mShowPageTitle; diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index 4f8559718f..eec0965384 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -72,9 +72,14 @@ static LLChatTypeTrigger sChatTypeTriggers[] = {  };  LLNearbyChatBar::LLNearbyChatBar(const LLSD& key) -	: LLFloater(key), -	mChatBox(NULL) -{	mSpeakerMgr = LLLocalSpeakerMgr::getInstance(); +:	LLFloater(key), +	mChatBox(NULL), +	mNearbyChat(NULL), +	mOutputMonitor(NULL), +	mSpeakerMgr(NULL), +	mExpandedHeight(COLLAPSED_HEIGHT + EXPANDED_HEIGHT) +{ +	mSpeakerMgr = LLLocalSpeakerMgr::getInstance();  }  //virtual @@ -96,6 +101,7 @@ BOOL LLNearbyChatBar::postBuild()  	mChatBox->setEnableLineHistory(TRUE);  	mChatBox->setFont(LLViewerChat::getChatFont()); +	mNearbyChat = getChildView("nearby_chat");  	LLUICtrl* show_btn = getChild<LLUICtrl>("show_nearby_chat");  	show_btn->setCommitCallback(boost::bind(&LLNearbyChatBar::onToggleNearbyChatPanel, this)); @@ -106,8 +112,6 @@ BOOL LLNearbyChatBar::postBuild()  	// Register for font change notifications  	LLViewerChat::setFontChangedCallback(boost::bind(&LLNearbyChatBar::onChatFontChange, this, _1)); -	mExpandedHeight = COLLAPSED_HEIGHT + EXPANDED_HEIGHT; -  	enableResizeCtrls(true, true, false);  	return TRUE; @@ -123,8 +127,7 @@ bool LLNearbyChatBar::applyRectControl()  {  	bool rect_controlled = LLFloater::applyRectControl(); -	LLView* nearby_chat = getChildView("nearby_chat");	 -	if (!nearby_chat->getVisible()) +	if (!mNearbyChat->getVisible())  	{  		reshape(getRect().getWidth(), getMinHeight());  		enableResizeCtrls(true, true, false); diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index 866e07f123..baf12a06ea 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -86,9 +86,10 @@ protected:  	// Which non-zero channel did we last chat on?  	static S32 sLastSpecialChatChannel; -	LLLineEditor*		mChatBox; -	LLOutputMonitorCtrl* mOutputMonitor; -	LLLocalSpeakerMgr*  mSpeakerMgr; +	LLLineEditor*			mChatBox; +	LLView*					mNearbyChat; +	LLOutputMonitorCtrl*	mOutputMonitor; +	LLLocalSpeakerMgr*		mSpeakerMgr;  	S32 mExpandedHeight;  }; diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 9c3887377a..240a7c7a35 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -366,12 +366,15 @@ void LLNearbyChatScreenChannel::arrangeToasts()  	if(mStopProcessing || isHovering())  		return; -	LLView* floater_snap_region = gViewerWindow->getRootView()->getChildView("floater_snap_region"); - +	if (mFloaterSnapRegion == NULL) +	{ +		mFloaterSnapRegion = gViewerWindow->getRootView()->getChildView("floater_snap_region"); +	} +	  	if (!getParent())  	{  		// connect to floater snap region just to get resize events, we don't care about being a proper widget  -		floater_snap_region->addChild(this); +		mFloaterSnapRegion->addChild(this);  		setFollows(FOLLOWS_ALL);  	} @@ -379,7 +382,7 @@ void LLNearbyChatScreenChannel::arrangeToasts()  	updateRect();  	LLRect channel_rect; -	floater_snap_region->localRectToOtherView(floater_snap_region->getLocalRect(), &channel_rect, gFloaterView); +	mFloaterSnapRegion->localRectToOtherView(mFloaterSnapRegion->getLocalRect(), &channel_rect, gFloaterView);  	channel_rect.mLeft += 10;  	channel_rect.mRight = channel_rect.mLeft + 300; diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 15ba5195d9..5301955964 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -53,13 +53,22 @@ LLFastTimer::DeclareTimer FTM_GET_CHANNEL_RECT("Calculate Notification Channel R  LLRect LLScreenChannelBase::getChannelRect()  {  	LLFastTimer _(FTM_GET_CHANNEL_RECT); + +	if (mFloaterSnapRegion == NULL) +	{ +		mFloaterSnapRegion = gViewerWindow->getRootView()->getChildView("floater_snap_region"); +	} +	 +	if (mChicletRegion == NULL) +	{ +		mChicletRegion = gViewerWindow->getRootView()->getChildView("chiclet_container"); +	} +	  	LLRect channel_rect;  	LLRect chiclet_rect; -	LLView* floater_snap_region = gViewerWindow->getRootView()->getChildView("floater_snap_region"); -	floater_snap_region->localRectToScreen(floater_snap_region->getLocalRect(), &channel_rect); -	LLView* chiclet_region = gViewerWindow->getRootView()->getChildView("chiclet_container"); -	chiclet_region->localRectToScreen(chiclet_region->getLocalRect(), &chiclet_rect); +	mFloaterSnapRegion->localRectToScreen(mFloaterSnapRegion->getLocalRect(), &channel_rect); +	mChicletRegion->localRectToScreen(mChicletRegion->getLocalRect(), &chiclet_rect);  	channel_rect.mTop = chiclet_rect.mBottom;  	return channel_rect; @@ -81,14 +90,31 @@ LLScreenChannelBase::LLScreenChannelBase(const Params& p)  	mShowToasts(true),  	mID(p.id),  	mDisplayToastsAlways(p.display_toasts_always), -	mChannelAlignment(p.channel_align) -{	 +	mChannelAlignment(p.channel_align), +	mFloaterSnapRegion(NULL), +	mChicletRegion(NULL) +{  	mID = p.id;  	setMouseOpaque( false );  	setVisible(FALSE);  } +BOOL LLScreenChannelBase::postBuild() +{ +	if (mFloaterSnapRegion == NULL) +	{ +		mFloaterSnapRegion = gViewerWindow->getRootView()->getChildView("floater_snap_region"); +	} +	 +	if (mChicletRegion == NULL) +	{ +		mChicletRegion = gViewerWindow->getRootView()->getChildView("chiclet_container"); +	} +	 +	return TRUE; +} +  void LLScreenChannelBase::reshape(S32 width, S32 height, BOOL called_from_parent)  {  	redrawToasts(); @@ -473,12 +499,10 @@ void LLScreenChannel::modifyToastByNotificationID(LLUUID id, LLPanel* panel)  //--------------------------------------------------------------------------  void LLScreenChannel::redrawToasts()  { -	LLView* floater_snap_region = gViewerWindow->getRootView()->getChildView("floater_snap_region"); -  	if (!getParent())  	{  		// connect to floater snap region just to get resize events, we don't care about being a proper widget  -		floater_snap_region->addChild(this); +		mFloaterSnapRegion->addChild(this);  		setFollows(FOLLOWS_ALL);  	} diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h index 2f23552828..c9f8855fe6 100644 --- a/indra/newview/llscreenchannel.h +++ b/indra/newview/llscreenchannel.h @@ -69,6 +69,8 @@ public:  	};  	LLScreenChannelBase(const Params&); +	 +	BOOL postBuild();  	void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); @@ -123,7 +125,7 @@ protected:  	// Channel's flags  	bool		mControlHovering; -	LLToast*		mHoveredToast; +	LLToast*	mHoveredToast;  	bool		mCanStoreToasts;  	bool		mDisplayToastsAlways;  	// controls whether a channel shows toasts or not @@ -137,6 +139,9 @@ protected:  	// channel's ID  	LLUUID	mID; +	 +	LLView*	mFloaterSnapRegion; +	LLView* mChicletRegion;  }; diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp index 8774482acd..24cb559fd0 100644 --- a/indra/newview/llsidepaneltaskinfo.cpp +++ b/indra/newview/llsidepaneltaskinfo.cpp @@ -117,6 +117,42 @@ BOOL LLSidepanelTaskInfo::postBuild()  	childSetCommitCallback("checkbox next owner can transfer",	&LLSidepanelTaskInfo::onCommitNextOwnerTransfer,this);  	childSetCommitCallback("clickaction",						&LLSidepanelTaskInfo::onCommitClickAction,this);  	childSetCommitCallback("search_check",						&LLSidepanelTaskInfo::onCommitIncludeInSearch,this); +	 +	mDAPermModify = getChild<LLUICtrl>("perm_modify"); +	mDACreator = getChildView("Creator:"); +	mDACreatorName = getChild<LLUICtrl>("Creator Name"); +	mDAOwner = getChildView("Owner:"); +	mDAOwnerName = getChild<LLUICtrl>("Owner Name"); +	mDAGroup = getChildView("Group:"); +	mDAGroupName = getChild<LLUICtrl>("Group Name"); +	mDAButtonSetGroup = getChildView("button set group"); +	mDAObjectName = getChild<LLUICtrl>("Object Name"); +	mDAName = getChildView("Name:"); +	mDADescription = getChildView("Description:"); +	mDAObjectDescription = getChild<LLUICtrl>("Object Description"); +	mDAPermissions = getChildView("Permissions:"); +	mDACheckboxShareWithGroup = getChild<LLUICtrl>("checkbox share with group"); +	mDAButtonDeed = getChildView("button deed"); +	mDACheckboxAllowEveryoneMove = getChild<LLUICtrl>("checkbox allow everyone move"); +	mDACheckboxAllowEveryoneCopy = getChild<LLUICtrl>("checkbox allow everyone copy"); +	mDANextOwnerCan = getChildView("Next owner can:"); +	mDACheckboxNextOwnerCanModify = getChild<LLUICtrl>("checkbox next owner can modify"); +	mDACheckboxNextOwnerCanCopy = getChild<LLUICtrl>("checkbox next owner can copy"); +	mDACheckboxNextOwnerCanTransfer = getChild<LLUICtrl>("checkbox next owner can transfer"); +	mDACheckboxForSale = getChild<LLUICtrl>("checkbox for sale"); +	mDASearchCheck = getChild<LLUICtrl>("search_check"); +	mDAComboSaleType = getChild<LLComboBox>("sale type"); +	mDACost = getChild<LLUICtrl>("Cost"); +	mDAEditCost = getChild<LLUICtrl>("Edit Cost"); +	mDALabelClickAction = getChildView("label click action"); +	mDAComboClickAction = getChild<LLComboBox>("clickaction"); +	mDAB = getChildView("B:"); +	mDAO = getChildView("O:"); +	mDAG = getChildView("G:"); +	mDAE = getChildView("E:"); +	mDAN = getChildView("N:"); +	mDAF = getChildView("F:"); +	  	return TRUE;  } @@ -138,81 +174,80 @@ BOOL LLSidepanelTaskInfo::postBuild()  void LLSidepanelTaskInfo::disableAll()  { -	getChildView("perm_modify")->setEnabled(FALSE); -	getChild<LLUICtrl>("perm_modify")->setValue(LLStringUtil::null); - -	getChildView("Creator:")->setEnabled(FALSE); -	getChild<LLUICtrl>("Creator Name")->setValue(LLStringUtil::null); -	getChildView("Creator Name")->setEnabled(FALSE); - -	getChildView("Owner:")->setEnabled(FALSE); -	getChild<LLUICtrl>("Owner Name")->setValue(LLStringUtil::null); -	getChildView("Owner Name")->setEnabled(FALSE); - -	getChildView("Group:")->setEnabled(FALSE); -	getChild<LLUICtrl>("Group Name")->setValue(LLStringUtil::null); -	getChildView("Group Name")->setEnabled(FALSE); -	getChildView("button set group")->setEnabled(FALSE); - -	getChild<LLUICtrl>("Object Name")->setValue(LLStringUtil::null); -	getChildView("Object Name")->setEnabled(FALSE); -	getChildView("Name:")->setEnabled(FALSE); -	getChild<LLUICtrl>("Group Name")->setValue(LLStringUtil::null); -	getChildView("Group Name")->setEnabled(FALSE); -	getChildView("Description:")->setEnabled(FALSE); -	getChild<LLUICtrl>("Object Description")->setValue(LLStringUtil::null); -	getChildView("Object Description")->setEnabled(FALSE); - -	getChildView("Permissions:")->setEnabled(FALSE); +	mDAPermModify->setEnabled(FALSE); +	mDAPermModify->setValue(LLStringUtil::null); + +	mDACreator->setEnabled(FALSE); +	mDACreatorName->setValue(LLStringUtil::null); +	mDACreatorName->setEnabled(FALSE); + +	mDAOwner->setEnabled(FALSE); +	mDAOwnerName->setValue(LLStringUtil::null); +	mDAOwnerName->setEnabled(FALSE); + +	mDAGroup->setEnabled(FALSE); +	mDAGroupName->setValue(LLStringUtil::null); +	mDAGroupName->setEnabled(FALSE); +	mDAButtonSetGroup->setEnabled(FALSE); + +	mDAObjectName->setValue(LLStringUtil::null); +	mDAObjectName->setEnabled(FALSE); +	mDAName->setEnabled(FALSE); +	mDAGroupName->setValue(LLStringUtil::null); +	mDAGroupName->setEnabled(FALSE); +	mDADescription->setEnabled(FALSE); +	mDAObjectDescription->setValue(LLStringUtil::null); +	mDAObjectDescription->setEnabled(FALSE); + +	mDAPermissions->setEnabled(FALSE); -	getChild<LLUICtrl>("checkbox share with group")->setValue(FALSE); -	getChildView("checkbox share with group")->setEnabled(FALSE); -	getChildView("button deed")->setEnabled(FALSE); +	mDACheckboxShareWithGroup->setValue(FALSE); +	mDACheckboxShareWithGroup->setEnabled(FALSE); +	mDAButtonDeed->setEnabled(FALSE); -	getChild<LLUICtrl>("checkbox allow everyone move")->setValue(FALSE); -	getChildView("checkbox allow everyone move")->setEnabled(FALSE); -	getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(FALSE); -	getChildView("checkbox allow everyone copy")->setEnabled(FALSE); +	mDACheckboxAllowEveryoneMove->setValue(FALSE); +	mDACheckboxAllowEveryoneMove->setEnabled(FALSE); +	mDACheckboxAllowEveryoneCopy->setValue(FALSE); +	mDACheckboxAllowEveryoneCopy->setEnabled(FALSE);  	//Next owner can: -	getChildView("Next owner can:")->setEnabled(FALSE); -	getChild<LLUICtrl>("checkbox next owner can modify")->setValue(FALSE); -	getChildView("checkbox next owner can modify")->setEnabled(FALSE); -	getChild<LLUICtrl>("checkbox next owner can copy")->setValue(FALSE); -	getChildView("checkbox next owner can copy")->setEnabled(FALSE); -	getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(FALSE); -	getChildView("checkbox next owner can transfer")->setEnabled(FALSE); +	mDANextOwnerCan->setEnabled(FALSE); +	mDACheckboxNextOwnerCanModify->setValue(FALSE); +	mDACheckboxNextOwnerCanModify->setEnabled(FALSE); +	mDACheckboxNextOwnerCanCopy->setValue(FALSE); +	mDACheckboxNextOwnerCanCopy->setEnabled(FALSE); +	mDACheckboxNextOwnerCanTransfer->setValue(FALSE); +	mDACheckboxNextOwnerCanTransfer->setEnabled(FALSE);  	//checkbox for sale -	getChild<LLUICtrl>("checkbox for sale")->setValue(FALSE); -	getChildView("checkbox for sale")->setEnabled(FALSE); +	mDACheckboxForSale->setValue(FALSE); +	mDACheckboxForSale->setEnabled(FALSE);  	//checkbox include in search -	getChild<LLUICtrl>("search_check")->setValue(FALSE); -	getChildView("search_check")->setEnabled(FALSE); +	mDASearchCheck->setValue(FALSE); +	mDASearchCheck->setEnabled(FALSE); -	LLComboBox*	combo_sale_type = getChild<LLComboBox>("sale type"); -	combo_sale_type->setValue(LLSaleInfo::FS_COPY); -	combo_sale_type->setEnabled(FALSE); +	mDAComboSaleType->setValue(LLSaleInfo::FS_COPY); +	mDAComboSaleType->setEnabled(FALSE); -	getChildView("Cost")->setEnabled(FALSE); -	getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default")); -	getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null); -	getChildView("Edit Cost")->setEnabled(FALSE); +	mDACost->setEnabled(FALSE); +	mDACost->setValue(getString("Cost Default")); +	mDAEditCost->setValue(LLStringUtil::null); +	mDAEditCost->setEnabled(FALSE); -	getChildView("label click action")->setEnabled(FALSE); -	LLComboBox*	combo_click_action = getChild<LLComboBox>("clickaction"); -	if (combo_click_action) +	mDALabelClickAction->setEnabled(FALSE); +	if (mDAComboClickAction)  	{ -		combo_click_action->setEnabled(FALSE); -		combo_click_action->clear(); +		mDAComboClickAction->setEnabled(FALSE); +		mDAComboClickAction->clear();  	} -	getChildView("B:")->setVisible(								FALSE); -	getChildView("O:")->setVisible(								FALSE); -	getChildView("G:")->setVisible(								FALSE); -	getChildView("E:")->setVisible(								FALSE); -	getChildView("N:")->setVisible(								FALSE); -	getChildView("F:")->setVisible(								FALSE); + +	mDAB->setVisible(FALSE); +	mDAO->setVisible(FALSE); +	mDAG->setVisible(FALSE); +	mDAE->setVisible(FALSE); +	mDAN->setVisible(FALSE); +	mDAF->setVisible(FALSE);  	mOpenBtn->setEnabled(FALSE);  	mPayBtn->setEnabled(FALSE); diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h index 384bc479d6..be0fee2127 100644 --- a/indra/newview/llsidepaneltaskinfo.h +++ b/indra/newview/llsidepaneltaskinfo.h @@ -37,8 +37,9 @@  // Panel for permissions of an object.  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -class LLNameBox;  class LLCheckBoxCtrl; +class LLComboBox; +class LLNameBox;  class LLViewerObject;  class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel @@ -118,6 +119,43 @@ private:  	LLPointer<LLViewerObject>	mObject;  	LLObjectSelectionHandle		mObjectSelection;  	static LLSidepanelTaskInfo* sActivePanel; +	 +private: +	// Pointers cached here to speed up the "disableAll" function which gets called on idle +	LLUICtrl*	mDAPermModify; +	LLView*		mDACreator; +	LLUICtrl*	mDACreatorName; +	LLView*		mDAOwner; +	LLUICtrl*	mDAOwnerName; +	LLView*		mDAGroup; +	LLUICtrl*	mDAGroupName; +	LLView*		mDAButtonSetGroup; +	LLUICtrl*	mDAObjectName; +	LLView*		mDAName; +	LLView*		mDADescription; +	LLUICtrl*	mDAObjectDescription; +	LLView*		mDAPermissions; +	LLUICtrl*	mDACheckboxShareWithGroup; +	LLView*		mDAButtonDeed; +	LLUICtrl*	mDACheckboxAllowEveryoneMove; +	LLUICtrl*	mDACheckboxAllowEveryoneCopy; +	LLView*		mDANextOwnerCan; +	LLUICtrl*	mDACheckboxNextOwnerCanModify; +	LLUICtrl*	mDACheckboxNextOwnerCanCopy; +	LLUICtrl*	mDACheckboxNextOwnerCanTransfer; +	LLUICtrl*	mDACheckboxForSale; +	LLUICtrl*	mDASearchCheck; +	LLComboBox*	mDAComboSaleType; +	LLUICtrl*	mDACost; +	LLUICtrl*	mDAEditCost; +	LLView*		mDALabelClickAction; +	LLComboBox*	mDAComboClickAction; +	LLView*		mDAB; +	LLView*		mDAO; +	LLView*		mDAG; +	LLView*		mDAE; +	LLView*		mDAN; +	LLView*		mDAF;  }; diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 75db269bde..89240c982f 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -114,6 +114,7 @@ LLStatusBar::LLStatusBar(const LLRect& rect)  	mTextTime(NULL),  	mSGBandwidth(NULL),  	mSGPacketLoss(NULL), +	mBtnStats(NULL),  	mBtnVolume(NULL),  	mBoxBalance(NULL),  	mBalance(0), @@ -173,6 +174,8 @@ BOOL LLStatusBar::postBuild()  	mBoxBalance = getChild<LLTextBox>("balance");  	mBoxBalance->setClickedCallback( &LLStatusBar::onClickBalance, this ); +	 +	mBtnStats = getChildView("stat_btn");  	mBtnVolume = getChild<LLButton>( "volume_btn" );  	mBtnVolume->setClickedCallback( onClickVolume, this ); @@ -288,7 +291,7 @@ void LLStatusBar::refresh()  	mSGBandwidth->setVisible(net_stats_visible);  	mSGPacketLoss->setVisible(net_stats_visible); -	getChildView("stat_btn")->setEnabled(net_stats_visible); +	mBtnStats->setEnabled(net_stats_visible);  	// update the master volume button state  	bool mute_audio = LLAppViewer::instance()->getMasterSystemAudioMute(); diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index 4ea3183d18..9d28e6c2bc 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -102,10 +102,11 @@ private:  	LLStatGraph *mSGBandwidth;  	LLStatGraph *mSGPacketLoss; +	LLView		*mBtnStats;  	LLButton	*mBtnVolume;  	LLTextBox	*mBoxBalance;  	LLButton	*mMediaToggle; -	LLView*		mScriptOut; +	LLView		*mScriptOut;  	LLFrameTimer	mClockUpdateTimer;  	S32				mBalance; diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 73e4d11d7b..093b84413a 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -564,7 +564,6 @@ void settings_setup_listeners()  	gSavedSettings.getControl("OctreeAttachmentSizeFactor")->getSignal()->connect(boost::bind(&handleRepartition, _2));  	gSavedSettings.getControl("RenderMaxTextureIndex")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));  	gSavedSettings.getControl("RenderUseTriStrips")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2)); -	gSavedSettings.getControl("RenderAnimateTrees")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));  	gSavedSettings.getControl("RenderAvatarVP")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));  	gSavedSettings.getControl("VertexShaderEnable")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));  	gSavedSettings.getControl("RenderUIBuffer")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 3f0b5bf3fb..cb40af7061 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -230,7 +230,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  		glClear(GL_COLOR_BUFFER_BIT);  		gViewerWindow->getWindow()->swapBuffers();  		LLPipeline::refreshCachedSettings(); -		LLPipeline::refreshRenderDeferred();  		gPipeline.resizeScreenTexture();  		gResizeScreenTexture = FALSE;  		gWindowResized = FALSE; @@ -617,9 +616,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  		//Increment drawable frame counter  		LLDrawable::incrementVisible(); -		LLPipeline::refreshCachedSettings(); -		LLPipeline::refreshRenderDeferred(); -  		LLSpatialGroup::sNoDelete = TRUE;  		LLTexUnit::sWhiteTexture = LLViewerFetchedTexture::sWhiteImagep->getTexName(); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index dca5cdd06d..ad333a71ff 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3638,6 +3638,9 @@ void process_teleport_finish(LLMessageSystem* msg, void**)  	gCacheName->setUpstream(sim);  */ +	// Make sure we're standing +	gAgent.standUp(); +  	// now, use the circuit info to tell simulator about us!  	LL_INFOS("Messaging") << "process_teleport_finish() Enabling "  			<< sim_host << " with code " << msg->mOurCircuitCode << LL_ENDL; diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 18ae83e3b6..bddc07b395 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -1338,6 +1338,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	if (success)  	{  		gDeferredShadowAlphaMaskProgram.mName = "Deferred Shadow Alpha Mask Shader"; +		gDeferredShadowAlphaMaskProgram.mFeatures.mIndexedTextureChannels = LLGLSLShader::sIndexedTextureChannels;  		gDeferredShadowAlphaMaskProgram.mShaderFiles.clear();  		gDeferredShadowAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/shadowAlphaMaskV.glsl", GL_VERTEX_SHADER_ARB));  		gDeferredShadowAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/shadowAlphaMaskF.glsl", GL_FRAGMENT_SHADER_ARB)); diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 786e2b73b1..f4bbc2b067 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -2269,6 +2269,7 @@ void LLViewerFetchedTexture::unpauseLoadedCallbacks(const LLLoadedCallbackEntry:  		}  	}  	mPauseLoadedCallBacks = FALSE ; +	mLastCallBackActiveTime = sCurrentTime ;  	if(need_raw)  	{  		mSaveRawImage = TRUE ; @@ -2308,13 +2309,18 @@ void LLViewerFetchedTexture::pauseLoadedCallbacks(const LLLoadedCallbackEntry::s  bool LLViewerFetchedTexture::doLoadedCallbacks()  { -	static const F32 MAX_INACTIVE_TIME = 120.f ; //seconds +	static const F32 MAX_INACTIVE_TIME = 900.f ; //seconds  	if (mNeedsCreateTexture)  	{  		return false;  	} -	if(sCurrentTime - mLastCallBackActiveTime > MAX_INACTIVE_TIME) +	if(mPauseLoadedCallBacks) +	{ +		destroyRawImage(); +		return false; //paused +	}	 +	if(sCurrentTime - mLastCallBackActiveTime > MAX_INACTIVE_TIME && !mIsFetching)  	{  		clearCallbackEntryList() ; //remove all callbacks.  		return false ; @@ -2337,12 +2343,8 @@ bool LLViewerFetchedTexture::doLoadedCallbacks()  		// Remove ourself from the global list of textures with callbacks  		gTextureList.mCallbackList.erase(this); -	} -	if(mPauseLoadedCallBacks) -	{ -		destroyRawImage(); -		return res; //paused -	} +		return false ; +	}	  	S32 gl_discard = getDiscardLevel(); @@ -2604,7 +2606,11 @@ bool LLViewerFetchedTexture::needsToSaveRawImage()  void LLViewerFetchedTexture::destroyRawImage()  {	 -	if (mAuxRawImage.notNull()) sAuxCount--; +	if (mAuxRawImage.notNull()) +	{ +		sAuxCount--; +		mAuxRawImage = NULL; +	}  	if (mRawImage.notNull())   	{ @@ -2618,12 +2624,12 @@ void LLViewerFetchedTexture::destroyRawImage()  			}		  			setCachedRawImage() ;  		} +		 +		mRawImage = NULL; +	 +		mIsRawImageValid = FALSE; +		mRawDiscardLevel = INVALID_DISCARD_LEVEL;  	} - -	mRawImage = NULL; -	mAuxRawImage = NULL; -	mIsRawImageValid = FALSE; -	mRawDiscardLevel = INVALID_DISCARD_LEVEL;  }  //use the mCachedRawImage to (re)generate the gl texture. diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 4c33716c32..4767ba2bed 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -690,7 +690,8 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,  	mFullyLoadedInitialized(FALSE),  	mSupportsAlphaLayers(FALSE),  	mLoadedCallbacksPaused(FALSE), -	mHasPelvisOffset( FALSE ) +	mHasPelvisOffset( FALSE ), +	mRenderUnloadedAvatar(LLCachedControl<bool>(gSavedSettings, "RenderUnloadedAvatar"))  {  	LLMemType mt(LLMemType::MTYPE_AVATAR);  	//VTResume();  // VTune @@ -6493,10 +6494,7 @@ BOOL LLVOAvatar::processFullyLoadedChange(bool loading)  BOOL LLVOAvatar::isFullyLoaded() const  { -	if (gSavedSettings.getBOOL("RenderUnloadedAvatar")) -		return TRUE; -	else -		return mFullyLoaded; +	return (mRenderUnloadedAvatar || mFullyLoaded);  }  bool LLVOAvatar::isTooComplex() const diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index e53b8e3f4b..59796370ae 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -40,6 +40,7 @@  #include "lldrawpoolalpha.h"  #include "llviewerobject.h"  #include "llcharacter.h" +#include "llcontrol.h"  #include "llviewerjointmesh.h"  #include "llviewerjointattachment.h"  #include "llrendertarget.h" @@ -450,6 +451,8 @@ private:  	F32			mImpostorDistance;  	F32			mImpostorPixelArea;  	LLVector3	mLastAnimExtents[2];   +	 +	LLCachedControl<bool> mRenderUnloadedAvatar;  	//--------------------------------------------------------------------  	// Wind rippling in clothes diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 3959a021fe..df1d3f2955 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -7019,7 +7019,6 @@ void LLVivoxVoiceClient::captureBufferPlayStopSendMessage()  LLVivoxProtocolParser::LLVivoxProtocolParser()  { -	parser = NULL;  	parser = XML_ParserCreate(NULL);  	reset(); diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 6486fd24ea..4564207da4 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -341,45 +341,11 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys,  BOOL LLVOTree::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)  { -	const U16 FRAMES_PER_WIND_UPDATE = 20;				//  How many frames between wind update per tree -	const F32 TREE_WIND_SENSITIVITY = 0.005f; -	const F32 TREE_TRUNK_STIFFNESS = 0.1f; -   	if (mDead || !(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_TREE)))  	{  		return TRUE;  	} -	if (gSavedSettings.getBOOL("RenderAnimateTrees")) -	{ -		F32 mass_inv;  - -		//  For all tree objects, update the trunk bending with the current wind  -		//  Walk sprite list in order away from viewer  -		if (!(mFrameCount % FRAMES_PER_WIND_UPDATE))  -		{ -			//  If needed, Get latest wind for this tree -			mWind = mRegionp->mWind.getVelocity(getPositionRegion()); -		} -		mFrameCount++; - -		mass_inv = 1.f/(5.f + mDepth*mBranches*0.2f); -		mTrunkVel += (mWind * mass_inv * TREE_WIND_SENSITIVITY);		//  Pull in direction of wind -		mTrunkVel -= (mTrunkBend * mass_inv * TREE_TRUNK_STIFFNESS);		//  Restoring force in direction of trunk 	 -		mTrunkBend += mTrunkVel; -		mTrunkVel *= 0.99f;									//  Add damping - -		if (mTrunkBend.length() > 1.f) -		{ -			mTrunkBend.normalize(); -		} - -		if (mTrunkVel.length() > 1.f) -		{ -			mTrunkVel.normalize(); -		} -	} -  	S32 trunk_LOD = sMAX_NUM_TREE_LOD_LEVELS ;  	F32 app_angle = getAppAngle()*LLVOTree::sTreeFactor; @@ -392,39 +358,36 @@ BOOL LLVOTree::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)  		}  	}  -	if (!gSavedSettings.getBOOL("RenderAnimateTrees")) +	if (mReferenceBuffer.isNull())  	{ -		if (mReferenceBuffer.isNull()) -		{ -			gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, TRUE); -		} -		else if (trunk_LOD != mTrunkLOD) +		gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, TRUE); +	} +	else if (trunk_LOD != mTrunkLOD) +	{ +		gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, FALSE); +	} +	else +	{ +		// we're not animating but we may *still* need to +		// regenerate the mesh if we moved, since position +		// and rotation are baked into the mesh. +		// *TODO: I don't know what's so special about trees +		// that they don't get REBUILD_POSITION automatically +		// at a higher level. +		const LLVector3 &this_position = getPositionAgent(); +		if (this_position != mLastPosition)  		{ -			gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, FALSE); +			gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_POSITION); +			mLastPosition = this_position;  		}  		else  		{ -			// we're not animating but we may *still* need to -			// regenerate the mesh if we moved, since position -			// and rotation are baked into the mesh. -			// *TODO: I don't know what's so special about trees -			// that they don't get REBUILD_POSITION automatically -			// at a higher level. -			const LLVector3 &this_position = getPositionAgent(); -			if (this_position != mLastPosition) +			const LLQuaternion &this_rotation = getRotation(); +			 +			if (this_rotation != mLastRotation)  			{  				gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_POSITION); -				mLastPosition = this_position; -			} -			else -			{ -				const LLQuaternion &this_rotation = getRotation(); -				 -				if (this_rotation != mLastRotation) -				{ -					gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_POSITION); -					mLastRotation = this_rotation; -				} +				mLastRotation = this_rotation;  			}  		}  	} @@ -559,7 +522,7 @@ BOOL LLVOTree::updateGeometry(LLDrawable *drawable)  			max_vertices += sLODVertexCount[lod];  		} -		mReferenceBuffer = new LLVertexBuffer(LLDrawPoolTree::VERTEX_DATA_MASK, gSavedSettings.getBOOL("RenderAnimateTrees") ? GL_STATIC_DRAW_ARB : 0); +		mReferenceBuffer = new LLVertexBuffer(LLDrawPoolTree::VERTEX_DATA_MASK, 0);  		mReferenceBuffer->allocateBuffer(max_vertices, max_indices, TRUE);  		LLStrider<LLVector3> vertices; @@ -863,15 +826,8 @@ BOOL LLVOTree::updateGeometry(LLDrawable *drawable)  		llassert(index_count == max_indices);  	} -	if (gSavedSettings.getBOOL("RenderAnimateTrees")) -	{ -		mDrawable->getFace(0)->setVertexBuffer(mReferenceBuffer); -	} -	else -	{ -		//generate tree mesh -		updateMesh(); -	} +	//generate tree mesh +	updateMesh();  	return TRUE;  } diff --git a/indra/newview/llvotree.h b/indra/newview/llvotree.h index 1e1deede26..0554935539 100644 --- a/indra/newview/llvotree.h +++ b/indra/newview/llvotree.h @@ -152,7 +152,6 @@ public:  	friend class LLDrawPoolTree;  protected:  	LLVector3		mTrunkBend;		// Accumulated wind (used for blowing trees) -	LLVector3		mTrunkVel;		//   	LLVector3		mWind;  	LLPointer<LLVertexBuffer> mReferenceBuffer; //reference geometry for generating tree mesh diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index baab191cb6..20f8674655 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -4624,6 +4624,19 @@ struct CompareBatchBreakerModified  void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort, BOOL batch_textures)  { +	U32 buffer_usage = group->mBufferUsage; +	 +#if LL_DARWIN +	// HACK from Leslie: +	// Disable VBO usage for alpha on Mac OS X because it kills the framerate +	// due to implicit calls to glTexSubImage that are beyond our control. +	// (this works because the only calls here that sort by distance are alpha) +	if (distance_sort) +	{ +		buffer_usage = 0x0; +	} +#endif +	  	//calculate maximum number of vertices to store in a single buffer  	U32 max_vertices = (gSavedSettings.getS32("RenderMaxVBOSize")*1024)/LLVertexBuffer::calcVertexSize(group->mSpatialPartition->mVertexDataMask);  	max_vertices = llmin(max_vertices, (U32) 65535); @@ -4805,17 +4818,15 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  		if (!buffer)  		{ //create new buffer if needed -			buffer = createVertexBuffer(mask,  -											group->mBufferUsage); +			buffer = createVertexBuffer(mask, buffer_usage);  			buffer->allocateBuffer(geom_count, index_count, TRUE);  		}  		else   		{ //resize pre-existing buffer -			if (LLVertexBuffer::sEnableVBOs && buffer->getUsage() != group->mBufferUsage || +			if (LLVertexBuffer::sEnableVBOs && buffer->getUsage() != buffer_usage ||  				buffer->getTypeMask() != mask)  			{ -				buffer = createVertexBuffer(mask,  -											group->mBufferUsage); +				buffer = createVertexBuffer(mask, buffer_usage);  				buffer->allocateBuffer(geom_count, index_count, TRUE);  			}  			else @@ -4896,11 +4907,6 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  				{  					registerFace(group, facep, LLRenderPass::PASS_ALPHA);  				} - -				if (LLPipeline::sRenderDeferred) -				{ -					registerFace(group, facep, LLRenderPass::PASS_ALPHA_SHADOW); -				}  			}  			else if (gPipeline.canUseVertexShaders()  				&& group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_HUD  diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index 6f6e0d2334..676287c0ad 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -818,14 +818,11 @@ void LLWorld::updateWaterObjects()  	max_x = (S32)region_x + range;  	max_y = (S32)region_y + range; -	F32 height = 0.f; -	  	for (region_list_t::iterator iter = mRegionList.begin();  		 iter != mRegionList.end(); ++iter)  	{  		LLViewerRegion* regionp = *iter;  		LLVOWater* waterp = regionp->getLand().getWaterObj(); -		height += regionp->getWaterHeight();  		if (waterp)  		{  			gObjectList.updateActive(waterp); @@ -842,6 +839,7 @@ void LLWorld::updateWaterObjects()  	// Now, get a list of the holes  	S32 x, y; +	F32 water_height = gAgent.getRegion()->getWaterHeight() + 256.f;  	for (x = min_x; x <= max_x; x += rwidth)  	{  		for (y = min_y; y <= max_y; y += rwidth) @@ -853,7 +851,7 @@ void LLWorld::updateWaterObjects()  				waterp->setUseTexture(FALSE);  				waterp->setPositionGlobal(LLVector3d(x + rwidth/2,  													 y + rwidth/2, -													 256.f+DEFAULT_WATER_HEIGHT)); +													 water_height));  				waterp->setScale(LLVector3((F32)rwidth, (F32)rwidth, 512.f));  				gPipeline.createObject(waterp);  				mHoleWaterObjects.push_back(waterp); @@ -910,8 +908,7 @@ void LLWorld::updateWaterObjects()  		}  		waterp->setRegion(gAgent.getRegion()); -		LLVector3d water_pos(water_center_x, water_center_y,  -			DEFAULT_WATER_HEIGHT+256.f); +		LLVector3d water_pos(water_center_x, water_center_y, water_height) ;  		LLVector3 water_scale((F32) dim[0], (F32) dim[1], 512.f);  		//stretch out to horizon diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp index f483ba5af8..920a9a3752 100644 --- a/indra/newview/llxmlrpctransaction.cpp +++ b/indra/newview/llxmlrpctransaction.cpp @@ -382,19 +382,11 @@ bool LLXMLRPCTransaction::Impl::process()  			// continue onward  		}  	} -	 -	//const F32 MAX_PROCESSING_TIME = 0.05f; -	//LLTimer timer; - -	mCurlRequest->perform(); - -	/*while (mCurlRequest->perform() > 0) +		 +	if(!mCurlRequest->wait())  	{ -		if (timer.getElapsedTimeF32() >= MAX_PROCESSING_TIME) -		{ -			return false; -		} -	}*/ +		return false ; +	}  	while(1)  	{ diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index d8e271811a..657cdc0e07 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -509,6 +509,92 @@ void LLPipeline::init()  	mDeferredVB = new LLVertexBuffer(DEFERRED_VB_MASK, 0);  	mDeferredVB->allocateBuffer(8, 0, true);  	setLightingDetail(-1); +	 +	// +	// Update all settings to trigger a cached settings refresh +	// + +	gSavedSettings.getControl("RenderAutoMaskAlphaDeferred")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderAutoMaskAlphaNonDeferred")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderUseFarClip")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderAvatarMaxVisible")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderDelayVBUpdate")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	 +	gSavedSettings.getControl("UseOcclusion")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	 +	gSavedSettings.getControl("VertexShaderEnable")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderAvatarVP")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("WindLightUseAtmosShaders")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderDeferred")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderDeferredSunWash")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderFSAASamples")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderResolutionDivisor")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderUIBuffer")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowDetail")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderDeferredSSAO")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowResolutionScale")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderLocalLights")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderDelayCreation")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderAnimateRes")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("FreezeTime")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("DebugBeaconLineWidth")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderHighlightBrightness")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderHighlightColor")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderHighlightThickness")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderSpotLightsInNondeferred")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("PreviewAmbientColor")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("PreviewDiffuse0")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("PreviewSpecular0")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("PreviewDiffuse1")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("PreviewSpecular1")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("PreviewDiffuse2")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("PreviewSpecular2")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("PreviewDirection0")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("PreviewDirection1")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("PreviewDirection2")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderGlowMinLuminance")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderGlowMaxExtractAlpha")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderGlowWarmthAmount")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderGlowLumWeights")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderGlowWarmthWeights")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderGlowResolutionPow")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderGlowIterations")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderGlowWidth")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderGlowStrength")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderDepthOfField")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("CameraFocusTransitionTime")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("CameraFNumber")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("CameraFocalLength")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("CameraFieldOfView")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowNoise")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowBlurSize")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderSSAOScale")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderSSAOMaxScale")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderSSAOFactor")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderSSAOEffect")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowOffsetError")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowBiasError")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowOffset")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowBias")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderSpotShadowOffset")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderSpotShadowBias")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderEdgeDepthCutoff")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderEdgeNormCutoff")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowGaussian")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowBlurDistFactor")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderDeferredAtmospheric")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderReflectionDetail")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderHighlightFadeTime")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowClipPlanes")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowOrthoClipPlanes")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowNearDist")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderFarClip")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowSplitExponent")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowErrorCutoff")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("RenderShadowFOVCutoff")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("CameraOffset")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("CameraMaxCoF")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings)); +	gSavedSettings.getControl("CameraDoFResScale")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings));  }  LLPipeline::~LLPipeline() @@ -707,7 +793,6 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)  bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)  {  	refreshCachedSettings(); -	refreshRenderDeferred();  	// remember these dimensions  	mScreenWidth = resX; @@ -840,12 +925,6 @@ void LLPipeline::updateRenderDeferred()  }  //static -void LLPipeline::refreshRenderDeferred() -{ -	updateRenderDeferred(); -} - -//static  void LLPipeline::refreshCachedSettings()  {  	LLPipeline::sAutoMaskAlphaDeferred = gSavedSettings.getBOOL("RenderAutoMaskAlphaDeferred"); @@ -933,6 +1012,8 @@ void LLPipeline::refreshCachedSettings()  	CameraOffset = gSavedSettings.getBOOL("CameraOffset");  	CameraMaxCoF = gSavedSettings.getF32("CameraMaxCoF");  	CameraDoFResScale = gSavedSettings.getF32("CameraDoFResScale"); +	 +	updateRenderDeferred();  }  void LLPipeline::releaseGLBuffers() @@ -6159,13 +6240,13 @@ void LLPipeline::resetVertexBuffers()  	LLVertexBuffer::initClass(LLVertexBuffer::sEnableVBOs, LLVertexBuffer::sDisableVBOMapping);  } -void LLPipeline::renderObjects(U32 type, U32 mask, BOOL texture) +void LLPipeline::renderObjects(U32 type, U32 mask, BOOL texture, BOOL batch_texture)  {  	LLMemType mt_ro(LLMemType::MTYPE_PIPELINE_RENDER_OBJECTS);  	assertInitialized();  	gGL.loadMatrix(gGLModelView);  	gGLLastMatrix = NULL; -	mSimplePool->pushBatches(type, mask); +	mSimplePool->pushBatches(type, mask, texture, batch_texture);  	gGL.loadMatrix(gGLModelView);  	gGLLastMatrix = NULL;		  } @@ -7027,13 +7108,12 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index, U32 n  			cube_map->enable(channel);  			cube_map->bind();  			F32* m = gGLModelView; - -			 +						  			F32 mat[] = { m[0], m[1], m[2],  						  m[4], m[5], m[6],  						  m[8], m[9], m[10] }; -			shader.uniform3fv(LLShaderMgr::DEFERRED_ENV_MAT, 3, mat); +			shader.uniformMatrix3fv(LLShaderMgr::DEFERRED_ENV_MAT, 1, TRUE, mat);  		}  	} @@ -8195,7 +8275,14 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera  	}  	LLPipeline::sShadowRender = TRUE; -	U32 types[] = { LLRenderPass::PASS_SIMPLE, LLRenderPass::PASS_FULLBRIGHT, LLRenderPass::PASS_SHINY, LLRenderPass::PASS_BUMP, LLRenderPass::PASS_FULLBRIGHT_SHINY }; +	U32 types[] = {  +		LLRenderPass::PASS_SIMPLE,  +		LLRenderPass::PASS_FULLBRIGHT,  +		LLRenderPass::PASS_SHINY,  +		LLRenderPass::PASS_BUMP,  +		LLRenderPass::PASS_FULLBRIGHT_SHINY  +	}; +  	LLGLEnable cull(GL_CULL_FACE);  	if (use_shader) @@ -8267,7 +8354,15 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera  		LLFastTimer ftm(FTM_SHADOW_ALPHA);  		gDeferredShadowAlphaMaskProgram.bind();  		gDeferredShadowAlphaMaskProgram.setMinimumAlpha(0.598f); -		renderObjects(LLRenderPass::PASS_ALPHA_SHADOW, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR, TRUE); +		 +		U32 mask =	LLVertexBuffer::MAP_VERTEX |  +					LLVertexBuffer::MAP_TEXCOORD0 |  +					LLVertexBuffer::MAP_COLOR |  +					LLVertexBuffer::MAP_TEXTURE_INDEX; + +		renderObjects(LLRenderPass::PASS_ALPHA_MASK, mask, TRUE, TRUE); +		renderObjects(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, mask, TRUE, TRUE); +		renderObjects(LLRenderPass::PASS_ALPHA, mask, TRUE, TRUE);  		gDeferredTreeShadowProgram.bind();  		gDeferredTreeShadowProgram.setMinimumAlpha(0.598f);  		renderObjects(LLRenderPass::PASS_GRASS, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, TRUE); @@ -8589,7 +8684,9 @@ void LLPipeline::generateSunShadow(LLCamera& camera)  					LLPipeline::RENDER_TYPE_TERRAIN,  					LLPipeline::RENDER_TYPE_WATER,  					LLPipeline::RENDER_TYPE_VOIDWATER, -					LLPipeline::RENDER_TYPE_PASS_ALPHA_SHADOW, +					LLPipeline::RENDER_TYPE_PASS_ALPHA, +					LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK, +					LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK,  					LLPipeline::RENDER_TYPE_PASS_GRASS,  					LLPipeline::RENDER_TYPE_PASS_SIMPLE,  					LLPipeline::RENDER_TYPE_PASS_BUMP, diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 8b6532ca25..2815d736e4 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -231,7 +231,7 @@ public:  	void postSort(LLCamera& camera);  	void forAllVisibleDrawables(void (*func)(LLDrawable*)); -	void renderObjects(U32 type, U32 mask, BOOL texture = TRUE); +	void renderObjects(U32 type, U32 mask, BOOL texture = TRUE, BOOL batch_texture = FALSE);  	void renderGroups(LLRenderPass* pass, U32 type, U32 mask, BOOL texture);  	void grabReferences(LLCullResult& result); @@ -359,7 +359,6 @@ public:  	static BOOL getRenderHighlights(void* data);  	static void updateRenderDeferred(); -	static void refreshRenderDeferred();  	static void refreshCachedSettings();  	static void throttleNewMemoryAllocation(BOOL disable); @@ -408,7 +407,6 @@ public:  		RENDER_TYPE_PASS_ALPHA					= LLRenderPass::PASS_ALPHA,  		RENDER_TYPE_PASS_ALPHA_MASK				= LLRenderPass::PASS_ALPHA_MASK,  		RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK	= LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, -		RENDER_TYPE_PASS_ALPHA_SHADOW = LLRenderPass::PASS_ALPHA_SHADOW,  		// Following are object types (only used in drawable mRenderType)  		RENDER_TYPE_HUD = LLRenderPass::NUM_RENDER_TYPES,  		RENDER_TYPE_VOLUME, diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index 165d47c931..11d100eeff 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -560,6 +560,9 @@ Prøv venligst om lidt igen.  	<string name="mesh">  		mesh  	</string> +	<string name="AvatarEditingAppearance"> +		(Redigering Udseende) +	</string>  	<string name="AvatarAway">  		Væk  	</string> diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index e71b714f25..0c38283d59 100644 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -34,7 +34,7 @@      </string>   	<string   	 name="profile_succeeded_str"> - 	    Profile feed updated! + 	    Image uploaded   	</string>   	<string   	 name="postcard_succeeded_str"> @@ -50,7 +50,7 @@   	</string>   	<string   	 name="profile_failed_str"> - 	    Failed to update your Profile Feed. + 	    Failed to upload image to your Profile Feed.   	</string>   	<string   	 name="postcard_failed_str"> diff --git a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml index aebbc51be1..2e0bb88f53 100644 --- a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml @@ -113,11 +113,11 @@               label="Image quality"               label_width="80"               layout="topleft" -             left="10" +             left="0"               max_val="100"               name="image_quality_slider"               top_pad="7" -             width="200" /> +             width="190" />              <text               type="string"               follows="left|top" diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index 4cae6ce5e8..e3ea4baa6c 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -586,6 +586,9 @@ Intenta iniciar sesión de nuevo en unos instantes.  	<string name="mesh">  		red  	</string> +	<string name="AvatarEditingAppearance"> +		(Edición de Apariencia) +	</string>  	<string name="AvatarAway">  		Ausente  	</string> diff --git a/indra/newview/skins/default/xui/fr/floater_object_weights.xml b/indra/newview/skins/default/xui/fr/floater_object_weights.xml index f1b063a3da..2667188308 100644 --- a/indra/newview/skins/default/xui/fr/floater_object_weights.xml +++ b/indra/newview/skins/default/xui/fr/floater_object_weights.xml @@ -1,28 +1,28 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <floater name="object_weights" title="AVANCÉ">  	<floater.string name="nothing_selected" value="--"/> -	<text name="selected_text" value="SELECTIONNÉ"/> +	<text name="selected_text" value="SÉLECTION"/>  	<text name="objects" value="--"/>  	<text name="objects_label" value="Objets"/>  	<text name="prims" value="--"/>  	<text name="prims_label" value="Prims"/> -	<text name="weights_of_selected_text" value="POIDS DES OBJETS SELECTIONNÉS"/> +	<text name="weights_of_selected_text" value="POIDS DE LA SÉLECTION"/>  	<text name="download" value="--"/> -	<text name="download_label" value="Télécharger"/> +	<text name="download_label" value="Téléchargement"/>  	<text name="physics" value="--"/> -	<text name="physics_label" value="Propriétés physiques"/> +	<text name="physics_label" value="Physique"/>  	<text name="server" value="--"/>  	<text name="server_label" value="Serveur"/>  	<text name="display" value="--"/> -	<text name="display_label" value="Afficher"/> +	<text name="display_label" value="Affichage"/>  	<text name="land_impacts_text" value="IMPACTS SUR LE TERRAIN"/>  	<text name="selected" value="--"/>  	<text name="selected_label" value="Sélection"/>  	<text name="rezzed_on_land" value="--"/> -	<text name="rezzed_on_land_label" value="Rezzé sur le terrain"/> +	<text name="rezzed_on_land_label" value="Rezzés sur le terrain"/>  	<text name="remaining_capacity" value="--"/>  	<text name="remaining_capacity_label" value="Capacité restante"/>  	<text name="total_capacity" value="--"/>  	<text name="total_capacity_label" value="Capacité totale"/> -	<text name="help_SLURL" value="[secondlife:///app/help/object_weights What is all this?...]"/> +	<text name="help_SLURL" value="[secondlife:///app/help/object_weights De quoi s'agit-il ?...]"/>  </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml index a9407abfde..fdd2ac8beb 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml @@ -6,6 +6,6 @@  	<text name="desc txt">  		Description :  	</text> -	<button label="Jouer dans Second Life" label_selected="Stop" name="Anim play btn" tool_tip="Lire cette animation de façon à ce que les autres puissent la voir" width="131"/> -	<button label="Jouer localement" label_selected="Stop" left="160" name="Anim audition btn" tool_tip="Lire cette animation de façon à ce que vous soyez la seule personne à pouvoir la voir" width="120"/> +	<button label="Exécuter dans Second Life" label_selected="Stop" name="Anim play btn" tool_tip="Lire cette animation de façon à ce que les autres puissent la voir" width="131"/> +	<button label="Exécuter localement" label_selected="Stop" left="160" name="Anim audition btn" tool_tip="Lire cette animation de façon à ce que vous soyez la seule personne à pouvoir la voir" width="120"/>  </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_stats.xml b/indra/newview/skins/default/xui/fr/floater_stats.xml index a74a338bd7..2ce2e6dcd5 100644 --- a/indra/newview/skins/default/xui/fr/floater_stats.xml +++ b/indra/newview/skins/default/xui/fr/floater_stats.xml @@ -38,7 +38,7 @@  			<stat_view label="Simulateur" name="sim">  				<stat_bar label="Dilatation temporelle" name="simtimedilation"/>  				<stat_bar label="FPS sim" name="simfps"/> -				<stat_bar label="Propriétés physiques FPS" name="simphysicsfps"/> +				<stat_bar label="FPS physique" name="simphysicsfps"/>  				<stat_view label="Détails des propriétés physiques" name="physicsdetail">  					<stat_bar label="Objets fixés" name="physicspinnedtasks"/>  					<stat_bar label="Objets LOD faibles" name="physicslodtasks"/> @@ -53,17 +53,17 @@  				<stat_bar label="Événements de scripts" name="simscripteps"/>  				<stat_bar label="Paquets en entrée" name="siminpps"/>  				<stat_bar label="Paquets en sortie" name="simoutpps"/> -				<stat_bar label="En attente des téléchargements" name="simpendingdownloads"/> -				<stat_bar label="En attente des chargements" name="simpendinguploads"/> +				<stat_bar label="Téléchargements en attente" name="simpendingdownloads"/> +				<stat_bar label="Chargements en attente" name="simpendinguploads"/>  				<stat_bar label="Total Unacked Bytes" name="simtotalunackedbytes"/>  				<stat_view label="Temps (ms)" name="simperf"> -					<stat_bar label="Durée du cadre totale" name="simframemsec"/> +					<stat_bar label="Durée totale de l'image" name="simframemsec"/>  					<stat_bar label="Durée nette" name="simnetmsec"/> -					<stat_bar label="Durée physique" name="simsimphysicsmsec"/> -					<stat_bar label="Durée de la simulation" name="simsimothermsec"/> -					<stat_bar label="Durée de l'avatar" name="simagentmsec"/> +					<stat_bar label="Durée sim (physique)" name="simsimphysicsmsec"/> +					<stat_bar label="Durée sim (autre)" name="simsimothermsec"/> +					<stat_bar label="Durée des avatars" name="simagentmsec"/>  					<stat_bar label="Durée des images" name="simimagesmsec"/> -					<stat_bar label="Durée du script" name="simscriptmsec"/> +					<stat_bar label="Durée des scripts" name="simscriptmsec"/>  					<stat_bar label="Temps d'inactivité" name="simsparemsec"/>  					<stat_view label="Détails Temps (ms)" name="timedetails">  						<stat_bar label="Etape propr. physiques" name="simsimphysicsstepmsec"/> diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml index 1ecf47f2e5..af5678ff0e 100644 --- a/indra/newview/skins/default/xui/fr/floater_tools.xml +++ b/indra/newview/skins/default/xui/fr/floater_tools.xml @@ -106,7 +106,7 @@  		Aucune sélection effectuée.  	</text>  	<text name="remaining_capacity"> -		[CAPACITY_STRING] [secondlife:///app/openfloater/object_weights More info] +		[CAPACITY_STRING] [secondlife:///app/openfloater/object_weights Plus d'infos]  	</text>  	<tab_container name="Object Info Tabs">  		<panel label="Général" name="General"> diff --git a/indra/newview/skins/default/xui/fr/floater_toybox.xml b/indra/newview/skins/default/xui/fr/floater_toybox.xml index e6fa212c65..33aea6bb2d 100644 --- a/indra/newview/skins/default/xui/fr/floater_toybox.xml +++ b/indra/newview/skins/default/xui/fr/floater_toybox.xml @@ -1,10 +1,10 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Toybox" title="PERSONNALISER LA BARRE D'OUTILS"> +<floater name="Toybox" title="PERSONNALISER LES BARRES D'OUTILS">  	<text name="toybox label 1"> -		Ajouter ou supprimer des boutons en les faisant glisser vers les barres d'outils ou à partir de ces dernières. +		Ajouter ou supprimer des boutons : les faire glisser vers ou depuis les barres d'outils.  	</text>  	<text name="toybox label 2"> -		Les boutons s'afficheront comme indiqué ou comme des icônes, en fonction des paramètres de chaque barre d'outils. +		Ils s'afficheront comme indiqué ou comme des icônes, selon les paramètres de barre d'outils.  	</text> -	<button label="Restaurer les choix par défaut" label_selected="Restaurer les choix par défaut" name="btn_restore_defaults"/> +	<button label="Valeurs par défaut" label_selected="Valeurs par défaut" name="btn_restore_defaults"/>  </floater> diff --git a/indra/newview/skins/default/xui/fr/menu_group_plus.xml b/indra/newview/skins/default/xui/fr/menu_group_plus.xml index 0db5afedc7..ad76f11d79 100644 --- a/indra/newview/skins/default/xui/fr/menu_group_plus.xml +++ b/indra/newview/skins/default/xui/fr/menu_group_plus.xml @@ -1,5 +1,5 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <menu name="menu_group_plus"> -	<menu_item_call label="Rejoindre des groupes..." name="item_join"/> +	<menu_item_call label="Rejoindre un groupe..." name="item_join"/>  	<menu_item_call label="Nouveau groupe..." name="item_new"/>  </menu> diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml index 53df8d11da..403111c4de 100644 --- a/indra/newview/skins/default/xui/fr/menu_inventory.xml +++ b/indra/newview/skins/default/xui/fr/menu_inventory.xml @@ -71,7 +71,7 @@  	<menu_item_call label="Jouer dans Second Life" name="Animation Play"/>  	<menu_item_call label="Jouer localement" name="Animation Audition"/>  	<menu_item_call label="Envoyer un message instantané" name="Send Instant Message"/> -	<menu_item_call label="Offrir de téléporter..." name="Offer Teleport..."/> +	<menu_item_call label="Proposer une téléportation..." name="Offer Teleport..."/>  	<menu_item_call label="Démarrer le chat conférence" name="Conference Chat"/>  	<menu_item_call label="Activer" name="Activate"/>  	<menu_item_call label="Désactiver" name="Deactivate"/> diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml index 0aad174fbd..8bb466b8d6 100644 --- a/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml +++ b/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml @@ -5,5 +5,5 @@  	<menu_item_check label="Trier par distance" name="sort_distance"/>  	<menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>  	<menu_item_check label="Afficher la carte" name="view_map"/> -	<menu_item_call label="Afficher les résidents et les objets interdits" name="show_blocked_list"/> +	<menu_item_call label="Afficher les résidents et les objets ignorés" name="show_blocked_list"/>  </toggleable_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_toolbars.xml b/indra/newview/skins/default/xui/fr/menu_toolbars.xml index bbfbe4b9ed..d3e9f92770 100644 --- a/indra/newview/skins/default/xui/fr/menu_toolbars.xml +++ b/indra/newview/skins/default/xui/fr/menu_toolbars.xml @@ -1,6 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <context_menu name="Toolbars Popup">  	<menu_item_call label="Choisir les boutons..." name="Chose Buttons"/> -	<menu_item_check label="Icônes et étiquettes" name="icons_with_text"/> +	<menu_item_check label="Icônes et libellés" name="icons_with_text"/>  	<menu_item_check label="Icônes uniquement" name="icons_only"/>  </context_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml index 78f973a61f..e2cb1f999d 100644 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -24,7 +24,7 @@  		<menu_item_call label="Acheter des L$" name="Buy and Sell L$"/>  		<menu_item_call label="Préférences..." name="Preferences"/>  		<menu_item_call label="Barres d'outils..." name="Toolbars"/> -		<menu_item_call label="Cacher tous les contrôles" name="Hide UI"/> +		<menu_item_call label="Masquer tous les contrôles" name="Hide UI"/>  		<menu_item_call label="Quitter [APP_NAME]" name="Quit"/>  	</menu>  	<menu label="Communiquer" name="Communicate"> diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index 18b9063c00..d8d79d8dde 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -3046,8 +3046,8 @@ Cliquez sur un point dans le monde et faites glisser votre souris pour faire tou  		<usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/>  	</notification>  	<notification label="" name="ConfirmHideUI"> -		Cette action cachera tous les objets des menus et boutons. Pour les récupérer, cliquez de nouveau sur [SHORTCUT]. -		<usetemplate ignoretext="Confimer avant de cacher l'interface" name="okcancelignore" notext="Annuler" yestext="OK"/> +		Cette action masquera tous les boutons et articles de menu. Pour les récupérer, cliquez de nouveau sur [SHORTCUT]. +		<usetemplate ignoretext="Confirmer avant de masquer l'interface" name="okcancelignore" notext="Annuler" yestext="OK"/>  	</notification>  	<global name="UnsupportedGLRequirements">  		Vous semblez ne pas avoir le matériel requis pour utiliser [APP_NAME]. [APP_NAME] requiert une carte graphique OpenGL avec une prise en charge du multitexturing. Si vous avez une telle carte, assurez-vous que vous avez aussi les pilotes les plus récents pour la carte, ainsi que les service packs et les patchs pour votre système d'exploitation. diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_move.xml b/indra/newview/skins/default/xui/fr/panel_preferences_move.xml index efb520bfd3..94d7322b22 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_move.xml @@ -24,16 +24,16 @@  		Clic simple sur le terrain :  	</text>  	<combo_box name="single_click_action_combo"> -		<combo_box.item label="Pas d'action" name="0"/> -		<combo_box.item label="Bouger vers le point cliqué" name="1"/> +		<combo_box.item label="Aucune action" name="0"/> +		<combo_box.item label="Déplacement vers le clic" name="1"/>  	</combo_box>  	<text name="double_click_action_lbl">  		Double-clic sur le terrain :  	</text>  	<combo_box name="double_click_action_combo"> -		<combo_box.item label="Pas d'action" name="0"/> -		<combo_box.item label="Bouger vers le point cliqué" name="1"/> -		<combo_box.item label="Téléporter vers le point cliqué" name="2"/> +		<combo_box.item label="Aucune action" name="0"/> +		<combo_box.item label="Déplacement vers le double clic" name="1"/> +		<combo_box.item label="Téléportation vers le double clic" name="2"/>  	</combo_box>  	<button label="Autres accessoires" name="joystick_setup_button"/>  </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml index b122db9502..cf1a374da6 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml @@ -20,7 +20,7 @@  	<check_box label="Inclure la date et l'heure pour chaque ligne du journal de chat" name="show_timestamps_check_im"/>  	<check_box label="Inclure la date dans le nom du fichier journal" name="logfile_name_datestamp"/>  	<text name="log_path_desc"> -		Emplacement des journaux : +		Emplacement journaux :  	</text>  	<line_editor left="308" name="log_path_string" right="-20"/>  	<button label="Parcourir" label_selected="Parcourir" name="log_path_button" width="150"/> diff --git a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml index f16fcebd02..ad744b7760 100644 --- a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml @@ -13,10 +13,10 @@  	</layout_stack>  	<layout_stack name="media_controls">  		<layout_panel name="back"> -			<button name="back_btn" tool_tip="Naviguer en arrière"/> +			<button name="back_btn" tool_tip="Précédente"/>  		</layout_panel>  		<layout_panel name="fwd"> -			<button name="fwd_btn" tool_tip="Naviguer vers l'avant"/> +			<button name="fwd_btn" tool_tip="Suivante"/>  		</layout_panel>  		<layout_panel name="home">  			<button name="home_btn" tool_tip="Page d'accueil"/> @@ -34,7 +34,7 @@  			<button name="play_btn" tool_tip="Lire le média"/>  		</layout_panel>  		<layout_panel name="pause"> -			<button name="pause_btn" tool_tip="Pauser le média"/> +			<button name="pause_btn" tool_tip="Mettre le média sur pause"/>  		</layout_panel>  		<layout_panel name="media_address">  			<line_editor name="media_address_url" tool_tip="URL du média"/> @@ -48,7 +48,7 @@  			</layout_stack>  		</layout_panel>  		<layout_panel name="media_play_position"> -			<slider_bar initial_value="0.5" name="media_play_slider" tool_tip="Progrès de la lecture du film"/> +			<slider_bar initial_value="0.5" name="media_play_slider" tool_tip="Progression de la lecture du film"/>  		</layout_panel>  		<layout_panel name="skip_back">  			<button name="skip_back_btn" tool_tip="Reculer"/> diff --git a/indra/newview/skins/default/xui/fr/panel_status_bar.xml b/indra/newview/skins/default/xui/fr/panel_status_bar.xml index e836c24a94..ac61eb7e52 100644 --- a/indra/newview/skins/default/xui/fr/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/fr/panel_status_bar.xml @@ -17,12 +17,12 @@  	</panel.string>  	<panel name="balance_bg">  		<text name="balance" tool_tip="Cliquer sur ce bouton pour actualiser votre solde en L$." value="20 L$"/> -		<button label="Achat de L$" name="buyL" tool_tip="Cliquer pour acheter plus de L$"/> -		<button label="Achats" name="goShop" tool_tip="Ouvrir la Place du marché Second Life"/> +		<button label="Acheter L$" name="buyL" tool_tip="Cliquer pour acheter plus de L$."/> +		<button label="Achats" name="goShop" tool_tip="Ouvrir la Place du marché Second Life."/>  	</panel>  	<text name="TimeText" tool_tip="Heure actuelle (Pacifique)">  		00h00 PST  	</text> -	<button name="media_toggle_btn" tool_tip="Arrêter tous les médias (musique, vidéo, pages web)"/> -	<button name="volume_btn" tool_tip="Contrôle du volume global"/> +	<button name="media_toggle_btn" tool_tip="Arrêter tous les médias (musique, vidéo, pages web)."/> +	<button name="volume_btn" tool_tip="Régler le volume global."/>  </panel> diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index e58ce0cd70..8f29233825 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -592,6 +592,9 @@ Prova ad accedere nuovamente tra un minuto.  	<string name="mesh">  		reticolo  	</string> +	<string name="AvatarEditingAppearance"> +		(Modifica Aspetto) +	</string>  	<string name="AvatarAway">  		Assente  	</string> diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml index 6a8309cca5..f6dec8536b 100644 --- a/indra/newview/skins/default/xui/pl/strings.xml +++ b/indra/newview/skins/default/xui/pl/strings.xml @@ -423,6 +423,9 @@  	<string name="symbolic folder link">  		link folderu  	</string> +	<string name="AvatarEditingAppearance"> +		(Edycja Wygląd) +	</string>  	<string name="AvatarAway">  		Śpi  	</string> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index cc61ad76d7..4535c7aaeb 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -547,6 +547,9 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar  	<string name="mesh">  		mesh  	</string> +	<string name="AvatarEditingAppearance"> +		(Edição Aparência) +	</string>  	<string name="AvatarAway">  		Distante  	</string> | 
