diff options
Diffstat (limited to 'indra')
103 files changed, 1061 insertions, 826 deletions
| diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index a869c74189..26ff1b5c55 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 = 3; -const S32 LL_VERSION_PATCH = 0; +const S32 LL_VERSION_PATCH = 1;  const S32 LL_VERSION_BUILD = 0;  const char * const LL_CHANNEL = "Second Life Developer"; diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 6b2852670a..3773568ad8 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -64,10 +64,23 @@ BOOL shouldChange(const LLVector4& v1, const LLVector4& v2)  }  LLShaderFeatures::LLShaderFeatures() -: calculatesLighting(false), isShiny(false), isFullbright(false), hasWaterFog(false), -hasTransport(false), hasSkinning(false), hasObjectSkinning(false), hasAtmospherics(false), isSpecular(false), -hasGamma(false), hasLighting(false), isAlphaLighting(false), calculatesAtmospherics(false), mIndexedTextureChannels(0), disableTextureIndex(false), -hasAlphaMask(false) +	: atmosphericHelpers(false) +	, calculatesLighting(false) +	, calculatesAtmospherics(false) +	, hasLighting(false) +	, isAlphaLighting(false) +	, isShiny(false) +	, isFullbright(false) +	, isSpecular(false) +	, hasWaterFog(false) +	, hasTransport(false) +	, hasSkinning(false) +	, hasObjectSkinning(false) +	, hasAtmospherics(false) +	, hasGamma(false) +	, mIndexedTextureChannels(0) +	, disableTextureIndex(false) +	, hasAlphaMask(false)  {  } diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index 00b4b0dbd4..7873fe3c4e 100644 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -33,6 +33,7 @@  class LLShaderFeatures  {  public: +	bool atmosphericHelpers;  	bool calculatesLighting;  	bool calculatesAtmospherics;  	bool hasLighting; // implies no transport (it's possible to have neither though) diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index 1a03aeebb7..908443e8cf 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -94,13 +94,16 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)  		}  	} -	if (features->calculatesLighting) +	if (features->calculatesLighting || features->atmosphericHelpers)  	{  		if (!shader->attachObject("windlight/atmosphericsHelpersV.glsl"))  		{  			return FALSE;  		} +	} +	if (features->calculatesLighting) +	{  		if (features->isSpecular)  		{  			if (!shader->attachObject("lighting/lightFuncSpecularV.glsl")) diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index eb302392bb..e4a5cd0299 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -53,31 +53,31 @@ U32 nhpo2(U32 v)  //============================================================================  //static -LLVBOPool LLVertexBuffer::sStreamVBOPool; -LLVBOPool LLVertexBuffer::sDynamicVBOPool; -LLVBOPool LLVertexBuffer::sStreamIBOPool; -LLVBOPool LLVertexBuffer::sDynamicIBOPool; +LLVBOPool LLVertexBuffer::sStreamVBOPool(GL_STREAM_DRAW_ARB, GL_ARRAY_BUFFER_ARB); +LLVBOPool LLVertexBuffer::sDynamicVBOPool(GL_DYNAMIC_DRAW_ARB, GL_ARRAY_BUFFER_ARB); +LLVBOPool LLVertexBuffer::sStreamIBOPool(GL_STREAM_DRAW_ARB, GL_ELEMENT_ARRAY_BUFFER_ARB); +LLVBOPool LLVertexBuffer::sDynamicIBOPool(GL_DYNAMIC_DRAW_ARB, GL_ELEMENT_ARRAY_BUFFER_ARB);  U32 LLVBOPool::sBytesPooled = 0; -LLPrivateMemoryPool* LLVertexBuffer::sPrivatePoolp = NULL ; +LLPrivateMemoryPool* LLVertexBuffer::sPrivatePoolp = NULL;  U32 LLVertexBuffer::sBindCount = 0;  U32 LLVertexBuffer::sSetCount = 0;  S32 LLVertexBuffer::sCount = 0;  S32 LLVertexBuffer::sGLCount = 0;  S32 LLVertexBuffer::sMappedCount = 0; -BOOL LLVertexBuffer::sDisableVBOMapping = FALSE ; -BOOL LLVertexBuffer::sEnableVBOs = TRUE; +bool LLVertexBuffer::sDisableVBOMapping = false; +bool LLVertexBuffer::sEnableVBOs = true;  U32 LLVertexBuffer::sGLRenderBuffer = 0;  U32 LLVertexBuffer::sGLRenderArray = 0;  U32 LLVertexBuffer::sGLRenderIndices = 0;  U32 LLVertexBuffer::sLastMask = 0; -BOOL LLVertexBuffer::sVBOActive = FALSE; -BOOL LLVertexBuffer::sIBOActive = FALSE; +bool LLVertexBuffer::sVBOActive = false; +bool LLVertexBuffer::sIBOActive = false;  U32 LLVertexBuffer::sAllocatedBytes = 0; -BOOL LLVertexBuffer::sMapped = FALSE; -BOOL LLVertexBuffer::sUseStreamDraw = TRUE; -BOOL LLVertexBuffer::sUseVAO = FALSE; -BOOL LLVertexBuffer::sPreferStreamDraw = FALSE; +bool LLVertexBuffer::sMapped = false; +bool LLVertexBuffer::sUseStreamDraw = true; +bool LLVertexBuffer::sUseVAO = false; +bool LLVertexBuffer::sPreferStreamDraw = false;  const U32 FENCE_WAIT_TIME_NANOSECONDS = 10000;  //1 ms @@ -204,15 +204,14 @@ void LLVBOPool::release(U32 name, volatile U8* buffer, U32 size)  	Record rec;  	rec.mGLName = name;  	rec.mClientData = buffer; - -	sBytesPooled += size; -	if (!LLVertexBuffer::sDisableVBOMapping && mUsage == GL_DYNAMIC_DRAW_ARB) +	if (buffer == NULL)  	{  		glDeleteBuffersARB(1, &rec.mGLName);  	}  	else  	{ +		sBytesPooled += size;  		mFreeList[i].push_back(rec);  	}  } @@ -283,7 +282,7 @@ void LLVertexBuffer::setupClientArrays(U32 data_mask)  {  	if (sLastMask != data_mask)  	{ -		BOOL error = FALSE; +		bool error = false;  		if (LLGLSLShader::sNoFixedFunction)  		{ @@ -344,7 +343,7 @@ void LLVertexBuffer::setupClientArrays(U32 data_mask)  						{  							if (gDebugSession)  							{ -								error = TRUE; +								error = true;  								gFailLog << "Bad client state! " << array[i] << " disabled." << std::endl;  							}  							else @@ -364,7 +363,7 @@ void LLVertexBuffer::setupClientArrays(U32 data_mask)  					{ //needs to be disabled, make sure it was (DEBUG TEMPORARY)  						if (gDebugSession)  						{ -							error = TRUE; +							error = true;  							gFailLog << "Bad client state! " << array[i] << " enabled." << std::endl;  						}  						else @@ -430,7 +429,7 @@ void LLVertexBuffer::drawArrays(U32 mode, const std::vector<LLVector3>& pos, con  	U32 count = pos.size();  	llassert_always(norm.size() >= pos.size()); -	llassert_always(count > 0) ; +	llassert_always(count > 0);  	unbind(); @@ -548,7 +547,7 @@ void LLVertexBuffer::validateRange(U32 start, U32 end, U32 count, U32 indices_of  void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indices_offset) const  {  	validateRange(start, end, count, indices_offset); -	mMappable = FALSE; +	mMappable = false;  	gGL.syncMatrices();  	llassert(mNumVerts >= 0); @@ -603,7 +602,7 @@ void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indi  void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const  {  	llassert(!LLGLSLShader::sNoFixedFunction || LLGLSLShader::sCurBoundShaderPtr != NULL); -	mMappable = FALSE; +	mMappable = false;  	gGL.syncMatrices();  	llassert(mNumIndices >= 0); @@ -649,7 +648,7 @@ void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const  void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const  {  	llassert(!LLGLSLShader::sNoFixedFunction || LLGLSLShader::sCurBoundShaderPtr != NULL); -	mMappable = FALSE; +	mMappable = false;  	gGL.syncMatrices();  	llassert(mNumVerts >= 0); @@ -689,23 +688,13 @@ void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const  //static  void LLVertexBuffer::initClass(bool use_vbo, bool no_vbo_mapping)  { -	sEnableVBOs = use_vbo && gGLManager.mHasVertexBufferObject ; -	sDisableVBOMapping = sEnableVBOs && no_vbo_mapping ; +	sEnableVBOs = use_vbo && gGLManager.mHasVertexBufferObject; +	sDisableVBOMapping = sEnableVBOs && no_vbo_mapping; -	if(!sPrivatePoolp) +	if (!sPrivatePoolp)  	{  -		sPrivatePoolp = LLPrivateMemoryPoolManager::getInstance()->newPool(LLPrivateMemoryPool::STATIC) ; +		sPrivatePoolp = LLPrivateMemoryPoolManager::getInstance()->newPool(LLPrivateMemoryPool::STATIC);  	} - -	sStreamVBOPool.mType = GL_ARRAY_BUFFER_ARB; -	sStreamVBOPool.mUsage= GL_STREAM_DRAW_ARB; -	sStreamIBOPool.mType = GL_ELEMENT_ARRAY_BUFFER_ARB; -	sStreamIBOPool.mUsage= GL_STREAM_DRAW_ARB; - -	sDynamicVBOPool.mType = GL_ARRAY_BUFFER_ARB; -	sDynamicVBOPool.mUsage= GL_DYNAMIC_DRAW_ARB; -	sDynamicIBOPool.mType = GL_ELEMENT_ARRAY_BUFFER_ARB; -	sDynamicIBOPool.mUsage= GL_DYNAMIC_DRAW_ARB;  }  //static  @@ -718,18 +707,18 @@ void LLVertexBuffer::unbind()  #endif  		sGLRenderArray = 0;  		sGLRenderIndices = 0; -		sIBOActive = FALSE; +		sIBOActive = false;  	}  	if (sVBOActive)  	{  		glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); -		sVBOActive = FALSE; +		sVBOActive = false;  	}  	if (sIBOActive)  	{  		glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); -		sIBOActive = FALSE; +		sIBOActive = false;  	}  	sGLRenderBuffer = 0; @@ -751,73 +740,80 @@ void LLVertexBuffer::cleanupClass()  	if(sPrivatePoolp)  	{ -		LLPrivateMemoryPoolManager::getInstance()->deletePool(sPrivatePoolp) ; -		sPrivatePoolp = NULL ; +		LLPrivateMemoryPoolManager::getInstance()->deletePool(sPrivatePoolp); +		sPrivatePoolp = NULL;  	}  }  //---------------------------------------------------------------------------- -LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage) : -	LLRefCount(), - -	mNumVerts(0), -	mNumIndices(0), -	mUsage(usage), -	mGLBuffer(0), -	mGLArray(0), -	mGLIndices(0),  -	mMappedData(NULL), -	mMappedIndexData(NULL),  -	mVertexLocked(FALSE), -	mIndexLocked(FALSE), -	mFinal(FALSE), -	mEmpty(TRUE), -	mFence(NULL) +S32 LLVertexBuffer::determineUsage(S32 usage)  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_CONSTRUCTOR); -	mFence = NULL; +	S32 ret_usage = usage; +  	if (!sEnableVBOs)  	{ -		mUsage = 0 ;  +		ret_usage = 0;  	} - -	if (mUsage == GL_STREAM_DRAW_ARB && !sUseStreamDraw) +	 +	if (ret_usage == GL_STREAM_DRAW_ARB && !sUseStreamDraw)  	{ -		mUsage = 0; +		ret_usage = 0;  	} -	if (mUsage == GL_DYNAMIC_DRAW_ARB && sPreferStreamDraw) +	if (ret_usage == GL_DYNAMIC_DRAW_ARB && sPreferStreamDraw)  	{ -		mUsage = GL_STREAM_DRAW_ARB; +		ret_usage = GL_STREAM_DRAW_ARB;  	} - -	if (mUsage == 0 && LLRender::sGLCoreProfile) +	 +	if (ret_usage == 0 && LLRender::sGLCoreProfile)  	{ //MUST use VBOs for all rendering -		mUsage = GL_STREAM_DRAW_ARB; +		ret_usage = GL_STREAM_DRAW_ARB;  	} - -	if (mUsage && mUsage != GL_STREAM_DRAW_ARB) +	 +	if (ret_usage && ret_usage != GL_STREAM_DRAW_ARB)  	{ //only stream_draw and dynamic_draw are supported when using VBOs, dynamic draw is the default  		if (sDisableVBOMapping)  		{ //always use stream draw if VBO mapping is disabled -			mUsage = GL_STREAM_DRAW_ARB; +			ret_usage = GL_STREAM_DRAW_ARB;  		}  		else  		{ -			mUsage = GL_DYNAMIC_DRAW_ARB; +			ret_usage = GL_DYNAMIC_DRAW_ARB;  		}  	} +	return ret_usage; +} -	if (mUsage == GL_DYNAMIC_DRAW_ARB && !sDisableVBOMapping) -	{ -		mMappable = TRUE; -	} -	else -	{ -		mMappable = FALSE; -	} +LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage) : +	LLRefCount(), + +	mNumVerts(0), +	mNumIndices(0), +	mAlignedOffset(0), +	mAlignedIndexOffset(0), +	mSize(0), +	mIndicesSize(0), +	mTypeMask(typemask), +	mUsage(LLVertexBuffer::determineUsage(usage)), +	mGLBuffer(0), +	mGLIndices(0), +	mGLArray(0), +	mMappedData(NULL), +	mMappedIndexData(NULL), +	mMappedDataUsingVBOs(false), +	mMappedIndexDataUsingVBOs(false), +	mVertexLocked(false), +	mIndexLocked(false), +	mFinal(false), +	mEmpty(true), +	mMappable(false), +	mFence(NULL) +{ +	LLMemType mt2(LLMemType::MTYPE_VERTEX_CONSTRUCTOR); + +	mMappable = (mUsage == GL_DYNAMIC_DRAW_ARB && !sDisableVBOMapping);  	//zero out offsets  	for (U32 i = 0; i < TYPE_MAX; i++) @@ -825,12 +821,6 @@ LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage) :  		mOffsets[i] = 0;  	} -	mTypeMask = typemask; -	mSize = 0; -	mIndicesSize = 0; -	mAlignedOffset = 0; -	mAlignedIndexOffset = 0; -  	sCount++;  } @@ -902,7 +892,7 @@ LLVertexBuffer::~LLVertexBuffer()  	mFence = NULL; -	llassert_always(!mMappedData && !mMappedIndexData) ; +	llassert_always(!mMappedData && !mMappedIndexData);  };  void LLVertexBuffer::placeFence() const @@ -1011,9 +1001,11 @@ void LLVertexBuffer::createGLBuffer(U32 size)  		return;  	} -	mEmpty = TRUE; +	mEmpty = true; -	if (useVBOs()) +	mMappedDataUsingVBOs = useVBOs(); +	 +	if (mMappedDataUsingVBOs)  	{  		genBuffer(size);  	} @@ -1040,12 +1032,14 @@ void LLVertexBuffer::createGLIndices(U32 size)  		return;  	} -	mEmpty = TRUE; +	mEmpty = true;  	//pad by 16 bytes for aligned copies  	size += 16; -	if (useVBOs()) +	mMappedIndexDataUsingVBOs = useVBOs(); + +	if (mMappedIndexDataUsingVBOs)  	{  		//pad by another 16 bytes for VBO pointer adjustment  		size += 16; @@ -1065,15 +1059,15 @@ void LLVertexBuffer::destroyGLBuffer()  	LLMemType mt2(LLMemType::MTYPE_VERTEX_DESTROY_BUFFER);  	if (mGLBuffer)  	{ -		if (useVBOs()) +		if (mMappedDataUsingVBOs)  		{  			releaseBuffer();  		}  		else  		{ -			FREE_MEM(sPrivatePoolp, (void*) mMappedData) ; +			FREE_MEM(sPrivatePoolp, (void*) mMappedData);  			mMappedData = NULL; -			mEmpty = TRUE; +			mEmpty = true;  		}  	} @@ -1086,15 +1080,15 @@ void LLVertexBuffer::destroyGLIndices()  	LLMemType mt2(LLMemType::MTYPE_VERTEX_DESTROY_INDICES);  	if (mGLIndices)  	{ -		if (useVBOs()) +		if (mMappedIndexDataUsingVBOs)  		{  			releaseIndices();  		}  		else  		{ -			FREE_MEM(sPrivatePoolp, (void*) mMappedIndexData) ; +			FREE_MEM(sPrivatePoolp, (void*) mMappedIndexData);  			mMappedIndexData = NULL; -			mEmpty = TRUE; +			mEmpty = true;  		}  	} @@ -1279,16 +1273,10 @@ void LLVertexBuffer::resizeBuffer(S32 newnverts, S32 newnindices)  	}  } -BOOL LLVertexBuffer::useVBOs() const +bool LLVertexBuffer::useVBOs() const  {  	//it's generally ineffective to use VBO for things that are streaming on apple -		 -	if (!mUsage) -	{ -		return FALSE; -	} - -	return TRUE; +	return (mUsage != 0);  }  //---------------------------------------------------------------------------- @@ -1368,7 +1356,7 @@ volatile U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, boo  		if (!mVertexLocked)  		{  			LLMemType mt_v(LLMemType::MTYPE_VERTEX_MAP_BUFFER_VERTICES); -			mVertexLocked = TRUE; +			mVertexLocked = true;  			sMappedCount++;  			stop_glerror();	 @@ -1447,17 +1435,17 @@ volatile U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, boo  			{  				log_glerror(); -			//check the availability of memory -			LLMemory::logMemoryInfo(TRUE) ;  +				//check the availability of memory +				LLMemory::logMemoryInfo(true);  				if(mMappable)  				{			  					//--------------------  					//print out more debug info before crash -					llinfos << "vertex buffer size: (num verts : num indices) = " << getNumVerts() << " : " << getNumIndices() << llendl ; -					GLint size ; -					glGetBufferParameterivARB(GL_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB, &size) ; -					llinfos << "GL_ARRAY_BUFFER_ARB size is " << size << llendl ; +					llinfos << "vertex buffer size: (num verts : num indices) = " << getNumVerts() << " : " << getNumIndices() << llendl; +					GLint size; +					glGetBufferParameterivARB(GL_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB, &size); +					llinfos << "GL_ARRAY_BUFFER_ARB size is " << size << llendl;  					//--------------------  					GLint buff; @@ -1472,7 +1460,7 @@ volatile U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, boo  				}  				else  				{ -					llerrs << "memory allocation for vertex data failed." << llendl ; +					llerrs << "memory allocation for vertex data failed." << llendl;  				}  			}  		} @@ -1547,7 +1535,7 @@ volatile U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range  		{  			LLMemType mt_v(LLMemType::MTYPE_VERTEX_MAP_BUFFER_INDICES); -			mIndexLocked = TRUE; +			mIndexLocked = true;  			sMappedCount++;  			stop_glerror();	 @@ -1626,7 +1614,7 @@ volatile U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range  		if (!mMappedIndexData)  		{  			log_glerror(); -			LLMemory::logMemoryInfo(TRUE) ; +			LLMemory::logMemoryInfo(true);  			if(mMappable)  			{ @@ -1641,7 +1629,7 @@ volatile U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range  			}  			else  			{ -				llerrs << "memory allocation for Index data failed. " << llendl ; +				llerrs << "memory allocation for Index data failed. " << llendl;  			}  		}  	} @@ -1672,10 +1660,10 @@ void LLVertexBuffer::unmapBuffer()  	LLMemType mt2(LLMemType::MTYPE_VERTEX_UNMAP_BUFFER);  	if (!useVBOs())  	{ -		return ; //nothing to unmap +		return; //nothing to unmap  	} -	bool updated_all = false ; +	bool updated_all = false;  	if (mMappedData && mVertexLocked)  	{ @@ -1742,7 +1730,7 @@ void LLVertexBuffer::unmapBuffer()  			mMappedData = NULL;  		} -		mVertexLocked = FALSE ; +		mVertexLocked = false;  		sMappedCount--;  	} @@ -1806,16 +1794,16 @@ void LLVertexBuffer::unmapBuffer()  			glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB);  			stop_glerror(); -			mMappedIndexData = NULL ; +			mMappedIndexData = NULL;  		} -		mIndexLocked = FALSE ; +		mIndexLocked = false;  		sMappedCount--;  	}  	if(updated_all)  	{ -		mEmpty = FALSE; +		mEmpty = false;  	}  } @@ -1835,12 +1823,12 @@ template <class T,S32 type> struct VertexBufferStrider  			if (ptr == NULL)  			{  				llwarns << "mapIndexBuffer failed!" << llendl; -				return FALSE; +				return false;  			}  			strider = (T*)ptr;  			strider.setStride(0); -			return TRUE; +			return true;  		}  		else if (vbo.hasDataType(type))  		{ @@ -1851,18 +1839,18 @@ template <class T,S32 type> struct VertexBufferStrider  			if (ptr == NULL)  			{  				llwarns << "mapVertexBuffer failed!" << llendl; -				return FALSE; +				return false;  			}  			strider = (T*)ptr;  			strider.setStride(stride); -			return TRUE; +			return true;  		}  		else  		{  			llerrs << "VertexBufferStrider could not find valid vertex data." << llendl;  		} -		return FALSE; +		return false;  	}  }; @@ -1961,7 +1949,7 @@ bool LLVertexBuffer::bindGLBuffer(bool force_bind)  		glBindBufferARB(GL_ARRAY_BUFFER_ARB, mGLBuffer);  		sGLRenderBuffer = mGLBuffer;  		sBindCount++; -		sVBOActive = TRUE; +		sVBOActive = true;  		if (mGLArray)  		{ @@ -1993,7 +1981,7 @@ bool LLVertexBuffer::bindGLIndices(bool force_bind)  		sGLRenderIndices = mGLIndices;  		stop_glerror();  		sBindCount++; -		sIBOActive = TRUE; +		sIBOActive = true;  		ret = true;  	} @@ -2015,7 +2003,7 @@ void LLVertexBuffer::setBuffer(U32 data_mask)  	LLMemType mt2(LLMemType::MTYPE_VERTEX_SET_BUFFER);  	//set up pointers if the data mask is different ... -	BOOL setup = (sLastMask != data_mask); +	bool setup = (sLastMask != data_mask);  	if (gDebugGL && data_mask != 0)  	{ //make sure data requirements are fulfilled @@ -2049,21 +2037,17 @@ void LLVertexBuffer::setBuffer(U32 data_mask)  		if (mGLArray)  		{  			bindGLArray(); -			setup = FALSE; //do NOT perform pointer setup if using VAO +			setup = false; //do NOT perform pointer setup if using VAO  		}  		else  		{ -			if (bindGLBuffer()) -			{ -				setup = TRUE; -			} -			if (bindGLIndices()) -			{ -				setup = TRUE; -			} +			const bool bindBuffer = bindGLBuffer(); +			const bool bindIndices = bindGLIndices(); +			 +			setup = setup || bindBuffer || bindIndices;  		} -		BOOL error = FALSE; +		bool error = false;  		if (gDebugGL && !mGLArray)  		{  			GLint buff; @@ -2072,7 +2056,7 @@ void LLVertexBuffer::setBuffer(U32 data_mask)  			{  				if (gDebugSession)  				{ -					error = TRUE; +					error = true;  					gFailLog << "Invalid GL vertex buffer bound: " << buff << std::endl;  				}  				else @@ -2088,7 +2072,7 @@ void LLVertexBuffer::setBuffer(U32 data_mask)  				{  					if (gDebugSession)  					{ -						error = TRUE; +						error = true;  						gFailLog << "Invalid GL index buffer bound: " << buff <<  std::endl;  					}  					else @@ -2110,7 +2094,7 @@ void LLVertexBuffer::setBuffer(U32 data_mask)  #endif  			sGLRenderArray = 0;  			sGLRenderIndices = 0; -			sIBOActive = FALSE; +			sIBOActive = false;  		}  		if (mGLBuffer) @@ -2119,13 +2103,13 @@ void LLVertexBuffer::setBuffer(U32 data_mask)  			{  				glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);  				sBindCount++; -				sVBOActive = FALSE; -				setup = TRUE; // ... or a VBO is deactivated +				sVBOActive = false; +				setup = true; // ... or a VBO is deactivated  			}  			if (sGLRenderBuffer != mGLBuffer)  			{  				sGLRenderBuffer = mGLBuffer; -				setup = TRUE; // ... or a client memory pointer changed +				setup = true; // ... or a client memory pointer changed  			}  		}  		if (mGLIndices) @@ -2134,7 +2118,7 @@ void LLVertexBuffer::setBuffer(U32 data_mask)  			{  				glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);  				sBindCount++; -				sIBOActive = FALSE; +				sIBOActive = false;  			}  			sGLRenderIndices = mGLIndices; @@ -2222,19 +2206,19 @@ void LLVertexBuffer::setupVertexBuffer(U32 data_mask)  		{  			S32 loc = TYPE_WEIGHT;  			void* ptr = (void*)(base + mOffsets[TYPE_WEIGHT]); -			glVertexAttribPointerARB(loc, 1, GL_FLOAT, FALSE, LLVertexBuffer::sTypeSize[TYPE_WEIGHT], ptr); +			glVertexAttribPointerARB(loc, 1, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_WEIGHT], ptr);  		}  		if (data_mask & MAP_WEIGHT4)  		{  			S32 loc = TYPE_WEIGHT4;  			void* ptr = (void*)(base+mOffsets[TYPE_WEIGHT4]); -			glVertexAttribPointerARB(loc, 4, GL_FLOAT, FALSE, LLVertexBuffer::sTypeSize[TYPE_WEIGHT4], ptr); +			glVertexAttribPointerARB(loc, 4, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_WEIGHT4], ptr);  		}  		if (data_mask & MAP_CLOTHWEIGHT)  		{  			S32 loc = TYPE_CLOTHWEIGHT;  			void* ptr = (void*)(base + mOffsets[TYPE_CLOTHWEIGHT]); -			glVertexAttribPointerARB(loc, 4, GL_FLOAT, TRUE,  LLVertexBuffer::sTypeSize[TYPE_CLOTHWEIGHT], ptr); +			glVertexAttribPointerARB(loc, 4, GL_FLOAT, GL_TRUE,  LLVertexBuffer::sTypeSize[TYPE_CLOTHWEIGHT], ptr);  		}  		if (data_mask & MAP_TEXTURE_INDEX)  		{ diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index e1cbfd3b61..d859199663 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -55,9 +55,14 @@ class LLVBOPool  {  public:  	static U32 sBytesPooled; +	 +	LLVBOPool(U32 vboUsage, U32 vboType) +		: mUsage(vboUsage) +		, mType(vboType) +	{} -	U32 mUsage; -	U32 mType; +	const U32 mUsage; +	const U32 mType;  	//size MUST be a power of 2  	volatile U8* allocate(U32& name, U32 size); @@ -88,7 +93,7 @@ public:  //============================================================================  // base class  -class LLPrivateMemoryPool ; +class LLPrivateMemoryPool;  class LLVertexBuffer : public LLRefCount  {  public: @@ -103,6 +108,7 @@ public:  	};  	LLVertexBuffer(const LLVertexBuffer& rhs) +		: mUsage(rhs.mUsage)  	{  		*this = rhs;  	} @@ -118,9 +124,9 @@ public:  	static LLVBOPool sStreamIBOPool;  	static LLVBOPool sDynamicIBOPool; -	static BOOL	sUseStreamDraw; -	static BOOL sUseVAO; -	static BOOL	sPreferStreamDraw; +	static bool	sUseStreamDraw; +	static bool sUseVAO; +	static bool	sPreferStreamDraw;  	static void initClass(bool use_vbo, bool no_vbo_mapping);  	static void cleanupClass(); @@ -201,7 +207,7 @@ protected:  	void 	destroyGLIndices();  	void	updateNumVerts(S32 nverts);  	void	updateNumIndices(S32 nindices);  -	virtual BOOL	useVBOs() const; +	bool	useVBOs() const;  	void	unmapBuffer();  public: @@ -239,8 +245,8 @@ public:  	bool getClothWeightStrider(LLStrider<LLVector4>& strider, S32 index=0, S32 count = -1, bool map_range = false); -	BOOL isEmpty() const					{ return mEmpty; } -	BOOL isLocked() const					{ return mVertexLocked || mIndexLocked; } +	bool isEmpty() const					{ return mEmpty; } +	bool isLocked() const					{ return mVertexLocked || mIndexLocked; }  	S32 getNumVerts() const					{ return mNumVerts; }  	S32 getNumIndices() const				{ return mNumIndices; } @@ -254,7 +260,7 @@ public:  	volatile U8* getMappedIndices() const			{ return mMappedIndexData; }  	S32 getOffset(S32 type) const			{ return mOffsets[type]; }  	S32 getUsage() const					{ return mUsage; } -	BOOL isWriteable() const				{ return (mMappable || mUsage == GL_STREAM_DRAW_ARB) ? TRUE : FALSE; } +	bool isWriteable() const				{ return (mMappable || mUsage == GL_STREAM_DRAW_ARB) ? true : false; }  	void draw(U32 mode, U32 count, U32 indices_offset) const;  	void drawArrays(U32 mode, U32 offset, U32 count) const; @@ -274,18 +280,25 @@ protected:  	S32		mSize;  	S32		mIndicesSize;  	U32		mTypeMask; -	S32		mUsage;			// GL usage + +	const S32		mUsage;			// GL usage +	  	U32		mGLBuffer;		// GL VBO handle  	U32		mGLIndices;		// GL IBO handle  	U32		mGLArray;		// GL VAO handle  	volatile U8* mMappedData;	// pointer to currently mapped data (NULL if unmapped)  	volatile U8* mMappedIndexData;	// pointer to currently mapped indices (NULL if unmapped) -	BOOL	mVertexLocked;			// if TRUE, vertex buffer is being or has been written to in client memory -	BOOL	mIndexLocked;			// if TRUE, index buffer is being or has been written to in client memory -	BOOL	mFinal;			// if TRUE, buffer can not be mapped again -	BOOL	mEmpty;			// if TRUE, client buffer is empty (or NULL). Old values have been discarded.	 -	mutable BOOL	mMappable;     // if TRUE, use memory mapping to upload data (otherwise doublebuffer and use glBufferSubData) + +	U32		mMappedDataUsingVBOs : 1; +	U32		mMappedIndexDataUsingVBOs : 1; +	U32		mVertexLocked : 1;			// if true, vertex buffer is being or has been written to in client memory +	U32		mIndexLocked : 1;			// if true, index buffer is being or has been written to in client memory +	U32		mFinal : 1;			// if true, buffer can not be mapped again +	U32		mEmpty : 1;			// if true, client buffer is empty (or NULL). Old values have been discarded.	 +	 +	mutable bool	mMappable;     // if true, use memory mapping to upload data (otherwise doublebuffer and use glBufferSubData) +  	S32		mOffsets[TYPE_MAX];  	std::vector<MappedRegion> mMappedVertexRegions; @@ -296,26 +309,27 @@ protected:  	void placeFence() const;  	void waitFence() const; +	static S32 determineUsage(S32 usage);  private: -	static LLPrivateMemoryPool* sPrivatePoolp ; +	static LLPrivateMemoryPool* sPrivatePoolp;  public:  	static S32 sCount;  	static S32 sGLCount;  	static S32 sMappedCount; -	static BOOL sMapped; +	static bool sMapped;  	typedef std::list<LLVertexBuffer*> buffer_list_t; -	static BOOL sDisableVBOMapping; //disable glMapBufferARB -	static BOOL sEnableVBOs; +	static bool sDisableVBOMapping; //disable glMapBufferARB +	static bool sEnableVBOs;  	static S32 sTypeSize[TYPE_MAX];  	static U32 sGLMode[LLRender::NUM_MODES];  	static U32 sGLRenderBuffer;  	static U32 sGLRenderArray;  	static U32 sGLRenderIndices; -	static BOOL sVBOActive; -	static BOOL sIBOActive; +	static bool sVBOActive; +	static bool sIBOActive;  	static U32 sLastMask;  	static U32 sAllocatedBytes;  	static U32 sBindCount; diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 6b74c5a6be..a38d0a0b0b 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -972,43 +972,53 @@ void gl_ring( F32 radius, F32 width, const LLColor4& center_color, const LLColor  // Draw gray and white checkerboard with black border  void gl_rect_2d_checkerboard(const LLRect& rect, GLfloat alpha)  { -	// Initialize the first time this is called. -	const S32 PIXELS = 32; -	static GLubyte checkerboard[PIXELS * PIXELS]; -	static BOOL first = TRUE; -	if( first ) -	{ -		for( S32 i = 0; i < PIXELS; i++ ) +	if (!LLGLSLShader::sNoFixedFunction) +	{  +		// Initialize the first time this is called. +		const S32 PIXELS = 32; +		static GLubyte checkerboard[PIXELS * PIXELS]; +		static BOOL first = TRUE; +		if( first )  		{ -			for( S32 j = 0; j < PIXELS; j++ ) +			for( S32 i = 0; i < PIXELS; i++ )  			{ -				checkerboard[i * PIXELS + j] = ((i & 1) ^ (j & 1)) * 0xFF; +				for( S32 j = 0; j < PIXELS; j++ ) +				{ +					checkerboard[i * PIXELS + j] = ((i & 1) ^ (j & 1)) * 0xFF; +				}  			} +			first = FALSE;  		} -		first = FALSE; -	} -	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); +		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); -	// ...white squares -	gGL.color4f( 1.f, 1.f, 1.f, alpha ); -	gl_rect_2d(rect); +		// ...white squares +		gGL.color4f( 1.f, 1.f, 1.f, alpha ); +		gl_rect_2d(rect); -	// ...gray squares -	gGL.color4f( .7f, .7f, .7f, alpha ); -	gGL.flush(); +		// ...gray squares +		gGL.color4f( .7f, .7f, .7f, alpha ); +		gGL.flush(); -	if (!LLGLSLShader::sNoFixedFunction) -	{ //polygon stipple is deprecated  		glPolygonStipple( checkerboard );  		LLGLEnable polygon_stipple(GL_POLYGON_STIPPLE);  		gl_rect_2d(rect);  	}  	else -	{ -		gl_rect_2d(rect); +	{ //polygon stipple is deprecated, use "Checker" texture +		LLPointer<LLUIImage> img = LLUI::getUIImage("Checker"); +		gGL.getTexUnit(0)->bind(img->getImage()); +		gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_WRAP); +		gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); + +		LLColor4 color(1.f, 1.f, 1.f, alpha); +		LLRectf uv_rect(0, 0, rect.getWidth()/32.f, rect.getHeight()/32.f); + +		gl_draw_scaled_image(rect.mLeft, rect.mBottom, rect.getWidth(), rect.getHeight(), +			img->getImage(), color, uv_rect);  	} +	  	gGL.flush();  } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index f85b943c70..37b23803f2 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -166,7 +166,7 @@ set(viewer_SOURCE_FILES      llfirstuse.cpp      llflexibleobject.cpp      llfloaterabout.cpp -    llfloateranimpreview.cpp +    llfloaterbvhpreview.cpp      llfloaterauction.cpp      llfloateravatar.cpp      llfloateravatarpicker.cpp @@ -722,7 +722,7 @@ set(viewer_HEADER_FILES      llfirstuse.h      llflexibleobject.h      llfloaterabout.h -    llfloateranimpreview.h +    llfloaterbvhpreview.h      llfloaterauction.h      llfloateravatar.h      llfloateravatarpicker.h diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml index 1d1d39c786..73df064ab2 100644 --- a/indra/newview/app_settings/commands.xml +++ b/indra/newview/app_settings/commands.xml @@ -37,6 +37,8 @@             tooltip_ref="Command_Build_Tooltip"             execute_function="Build.Toggle"             execute_parameters="build" +           is_enabled_function="Build.Enabled" +           is_enabled_parameters="build"             is_running_function="Floater.IsOpen"             is_running_parameters="build"             /> diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl index 40b0cf47ac..eada38eaaa 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl @@ -55,6 +55,12 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; +float calcDirectionalLight(vec3 n, vec3 l) +{ +        float a = max(dot(n,l),0.0); +        return a; +} +  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)  {  	//get light vector diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl index 8c96d55342..5c36118a50 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl @@ -64,6 +64,12 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; +float calcDirectionalLight(vec3 n, vec3 l) +{ +        float a = max(dot(n,l),0.0); +        return a; +} +  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)  {  	//get light vector diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl index c0edddc40a..d6149fcc32 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl @@ -59,6 +59,12 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; +float calcDirectionalLight(vec3 n, vec3 l) +{ +        float a = max(dot(n,l),0.0); +        return a; +} +  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)  {  	//get light vector diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl index 64e094e3c5..17f425475c 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl @@ -50,18 +50,18 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; +uniform float haze_horizon; +uniform float haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 max_y; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float max_y;  uniform vec4 glow;  uniform vec4 cloud_color; -uniform vec4 cloud_scale; +uniform float cloud_scale;  void main()  { @@ -77,7 +77,7 @@ void main()  	// Set altitude  	if (P.y > 0.)  	{ -		P *= (max_y.x / P.y); +		P *= (max_y / P.y);  	}  	else  	{ @@ -99,12 +99,12 @@ void main()  	// Sunlight attenuation effect (hue and brightness) due to atmosphere  	// this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + haze_density.x * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  	// Calculate relative weights -	temp1 = blue_density + haze_density.x; +	temp1 = blue_density + haze_density;  	blue_weight = blue_density / temp1; -	haze_weight = haze_density.x / temp1; +	haze_weight = haze_density / temp1;  	// Compute sunlight from P & lightnorm (for long rays like sky)  	temp2.y = max(0., max(0., Pn.y) * 1.0 + lightnorm.y ); @@ -112,7 +112,7 @@ void main()  	sunlight *= exp( - light_atten * temp2.y);  	// Distance -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1)  	// ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati @@ -136,14 +136,14 @@ void main()  	// Increase ambient when there are more clouds  	vec4 tmpAmbient = ambient; -	tmpAmbient += (1. - tmpAmbient) * cloud_shadow.x * 0.5;  +	tmpAmbient += (1. - tmpAmbient) * cloud_shadow * 0.5;   	// Dim sunlight by cloud shadow percentage -	sunlight *= (1. - cloud_shadow.x); +	sunlight *= (1. - cloud_shadow);  	// Haze color below cloud  	vec4 additiveColorBelowCloud = (	  blue_horizon * blue_weight * (sunlight + tmpAmbient) -				+ (haze_horizon.r * haze_weight) * (sunlight * temp2.x + tmpAmbient) +				+ (haze_horizon * haze_weight) * (sunlight * temp2.x + tmpAmbient)  			 );	  	// CLOUDS @@ -164,13 +164,13 @@ void main()  	vec4 oHazeColorBelowCloud = additiveColorBelowCloud * (1. - temp1);  	// Make a nice cloud density based on the cloud_shadow value that was passed in. -	vary_CloudDensity = 2. * (cloud_shadow.x - 0.25); +	vary_CloudDensity = 2. * (cloud_shadow - 0.25);  	// Texture coords  	vary_texcoord0 = texcoord0;  	vary_texcoord0.xy -= 0.5; -	vary_texcoord0.xy /= cloud_scale.x; +	vary_texcoord0.xy /= cloud_scale;  	vary_texcoord0.xy += 0.5;  	vary_texcoord1 = vary_texcoord0; diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl index 721de18e0b..cb7603f4fd 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl @@ -44,19 +44,17 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; +uniform float haze_horizon; +uniform float haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 max_y; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float max_y;  uniform vec4 glow;  uniform vec4 cloud_color; -uniform vec4 cloud_scale; -  void main()  { @@ -71,7 +69,7 @@ void main()  	// Set altitude  	if (P.y > 0.)  	{ -		P *= (max_y.x / P.y); +		P *= (max_y / P.y);  	}  	else  	{ @@ -93,12 +91,12 @@ void main()  	// Sunlight attenuation effect (hue and brightness) due to atmosphere  	// this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + haze_density.x * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  	// Calculate relative weights -	temp1 = blue_density + haze_density.x; +	temp1 = blue_density + haze_density;  	blue_weight = blue_density / temp1; -	haze_weight = haze_density.x / temp1; +	haze_weight = haze_density / temp1;  	// Compute sunlight from P & lightnorm (for long rays like sky)  	temp2.y = max(0., max(0., Pn.y) * 1.0 + lightnorm.y ); @@ -106,7 +104,7 @@ void main()  	sunlight *= exp( - light_atten * temp2.y);  	// Distance -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1)  	// ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati @@ -131,20 +129,20 @@ void main()  	// Haze color above cloud  	vary_HazeColor = (	  blue_horizon * blue_weight * (sunlight + ambient) -				+ (haze_horizon.r * haze_weight) * (sunlight * temp2.x + ambient) +				+ (haze_horizon * haze_weight) * (sunlight * temp2.x + ambient)  			 );	  	// Increase ambient when there are more clouds  	vec4 tmpAmbient = ambient; -	tmpAmbient += (1. - tmpAmbient) * cloud_shadow.x * 0.5;  +	tmpAmbient += (1. - tmpAmbient) * cloud_shadow * 0.5;   	// Dim sunlight by cloud shadow percentage -	sunlight *= (1. - cloud_shadow.x); +	sunlight *= (1. - cloud_shadow);  	// Haze color below cloud  	vec4 additiveColorBelowCloud = (	  blue_horizon * blue_weight * (sunlight + tmpAmbient) -				+ (haze_horizon.r * haze_weight) * (sunlight * temp2.x + tmpAmbient) +				+ (haze_horizon * haze_weight) * (sunlight * temp2.x + tmpAmbient)  			 );	  	// Final atmosphere additive diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index 51110ae4df..0c53a4ffa5 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -51,12 +51,12 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 distance_multiplier; -uniform vec4 max_y; +uniform float haze_horizon; +uniform float haze_density; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float distance_multiplier; +uniform float max_y;  uniform vec4 glow;  uniform float scene_light_strength;  uniform mat3 env_mat; @@ -159,13 +159,13 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	//sunlight attenuation effect (hue and brightness) due to atmosphere  	//this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + vec4(haze_density.r) * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  		//I had thought blue_density and haze_density should have equal weighting,  		//but attenuation due to haze_density tends to seem too strong -	temp1 = blue_density + vec4(haze_density.r); +	temp1 = blue_density + vec4(haze_density);  	blue_weight = blue_density / temp1; -	haze_weight = vec4(haze_density.r) / temp1; +	haze_weight = vec4(haze_density) / temp1;  	//(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain)  	temp2.y = max(0.0, tmpLightnorm.y); @@ -173,12 +173,12 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	sunlight *= exp( - light_atten * temp2.y);  	// main atmospheric scattering line integral -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1) -	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier.x in a variable because the ati +	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier in a variable because the ati  	// compiler gets confused. -	temp1 = exp(-temp1 * temp2.z * distance_multiplier.x); +	temp1 = exp(-temp1 * temp2.z * distance_multiplier);  	//final atmosphere attenuation factor  	setAtmosAttenuation(temp1.rgb); @@ -199,7 +199,7 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	temp2.x += .25;  	//increase ambient when there are more clouds -	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow.x * 0.5; +	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5;  	/*  decrease value and saturation (that in HSV, not HSL) for occluded areas  	 * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html @@ -213,8 +213,8 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	//haze color  	setAdditiveColor( -		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow.x) + tmpAmbient) -	  + (haze_horizon.r * haze_weight) * (sunlight*(1.-cloud_shadow.x) * temp2.x +		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient) +	  + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x  		  + tmpAmbient)));  	//brightness of surface both sunlight and ambient diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl index 83815b1786..9629cfe824 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl @@ -61,6 +61,12 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; +float calcDirectionalLight(vec3 n, vec3 l) +{ +        float a = max(dot(n,l),0.0); +        return a; +} +  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)  {  //get light vector diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl index 1660f9687e..1586aab0f2 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl @@ -63,6 +63,12 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; +float calcDirectionalLight(vec3 n, vec3 l) +{ +        float a = max(dot(n,l),0.0); +        return a; +} +  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)  {  	//get light vector diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl index 84c27edb26..44aaa98b97 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl @@ -60,6 +60,12 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; +float calcDirectionalLight(vec3 n, vec3 l) +{ +        float a = max(dot(n,l),0.0); +        return a; +} +  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)  {  	//get light vector diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index 97f3063a9e..27ea77b5a2 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -51,12 +51,12 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 distance_multiplier; -uniform vec4 max_y; +uniform float haze_horizon; +uniform float haze_density; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float distance_multiplier; +uniform float max_y;  uniform vec4 glow;  uniform float scene_light_strength;  uniform mat3 env_mat; @@ -161,13 +161,13 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	//sunlight attenuation effect (hue and brightness) due to atmosphere  	//this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + vec4(haze_density.r) * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  		//I had thought blue_density and haze_density should have equal weighting,  		//but attenuation due to haze_density tends to seem too strong -	temp1 = blue_density + vec4(haze_density.r); +	temp1 = blue_density + vec4(haze_density);  	blue_weight = blue_density / temp1; -	haze_weight = vec4(haze_density.r) / temp1; +	haze_weight = vec4(haze_density) / temp1;  	//(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain)  	temp2.y = max(0.0, tmpLightnorm.y); @@ -175,12 +175,12 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	sunlight *= exp( - light_atten * temp2.y);  	// main atmospheric scattering line integral -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1) -	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier.x in a variable because the ati +	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier in a variable because the ati  	// compiler gets confused. -	temp1 = exp(-temp1 * temp2.z * distance_multiplier.x); +	temp1 = exp(-temp1 * temp2.z * distance_multiplier);  	//final atmosphere attenuation factor  	setAtmosAttenuation(temp1.rgb); @@ -201,7 +201,7 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	temp2.x += .25;  	//increase ambient when there are more clouds -	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow.x * 0.5; +	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5;  	/*  decrease value and saturation (that in HSV, not HSL) for occluded areas  	 * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html @@ -215,8 +215,8 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	//haze color  	setAdditiveColor( -		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow.x) + tmpAmbient) -	  + (haze_horizon.r * haze_weight) * (sunlight*(1.-cloud_shadow.x) * temp2.x +		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient) +	  + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x  		  + tmpAmbient)));  	//brightness of surface both sunlight and ambient diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl index 6a83be1426..da3d922017 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl @@ -47,12 +47,12 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 distance_multiplier; -uniform vec4 max_y; +uniform float haze_horizon; +uniform float haze_density; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float distance_multiplier; +uniform float max_y;  uniform vec4 glow;  void calcAtmospherics(vec3 inPositionEye) { @@ -61,8 +61,8 @@ void calcAtmospherics(vec3 inPositionEye) {  	setPositionEye(P);  	//(TERRAIN) limit altitude -	if (P.y > max_y.x) P *= (max_y.x / P.y); -	if (P.y < -max_y.x) P *= (-max_y.x / P.y); +	if (P.y > max_y) P *= (max_y / P.y); +	if (P.y < -max_y) P *= (-max_y / P.y);  	vec3 tmpLightnorm = lightnorm.xyz; @@ -78,13 +78,13 @@ void calcAtmospherics(vec3 inPositionEye) {  	//sunlight attenuation effect (hue and brightness) due to atmosphere  	//this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + vec4(haze_density.r) * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  		//I had thought blue_density and haze_density should have equal weighting,  		//but attenuation due to haze_density tends to seem too strong -	temp1 = blue_density + vec4(haze_density.r); +	temp1 = blue_density + vec4(haze_density);  	blue_weight = blue_density / temp1; -	haze_weight = vec4(haze_density.r) / temp1; +	haze_weight = vec4(haze_density) / temp1;  	//(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain)  	temp2.y = max(0.0, tmpLightnorm.y); @@ -92,12 +92,12 @@ void calcAtmospherics(vec3 inPositionEye) {  	sunlight *= exp( - light_atten * temp2.y);  	// main atmospheric scattering line integral -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1) -	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier.x in a variable because the ati +	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier in a variable because the ati  	// compiler gets confused. -	temp1 = exp(-temp1 * temp2.z * distance_multiplier.x); +	temp1 = exp(-temp1 * temp2.z * distance_multiplier);  	//final atmosphere attenuation factor  	setAtmosAttenuation(temp1.rgb); @@ -122,12 +122,12 @@ void calcAtmospherics(vec3 inPositionEye) {  	//increase ambient when there are more clouds -	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow.x * 0.5; +	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5;  	//haze color  	setAdditiveColor( -		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow.x) + tmpAmbient) -	  + (haze_horizon.r * haze_weight) * (sunlight*(1.-cloud_shadow.x) * temp2.x +		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient) +	  + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x  		  + tmpAmbient)));  	//brightness of surface both sunlight and ambient diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl index c5bb52169c..c1dd45cd67 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl @@ -49,18 +49,18 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; +uniform float haze_horizon; +uniform float haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 max_y; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float max_y;  uniform vec4 glow;  uniform vec4 cloud_color; -uniform vec4 cloud_scale; +uniform float cloud_scale;  void main()  { @@ -76,7 +76,7 @@ void main()  	// Set altitude  	if (P.y > 0.)  	{ -		P *= (max_y.x / P.y); +		P *= (max_y / P.y);  	}  	else  	{ @@ -98,12 +98,12 @@ void main()  	// Sunlight attenuation effect (hue and brightness) due to atmosphere  	// this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + haze_density.x * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  	// Calculate relative weights -	temp1 = blue_density + haze_density.x; +	temp1 = blue_density + haze_density;  	blue_weight = blue_density / temp1; -	haze_weight = haze_density.x / temp1; +	haze_weight = haze_density / temp1;  	// Compute sunlight from P & lightnorm (for long rays like sky)  	temp2.y = max(0., max(0., Pn.y) * 1.0 + lightnorm.y ); @@ -111,7 +111,7 @@ void main()  	sunlight *= exp( - light_atten * temp2.y);  	// Distance -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1)  	// ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati @@ -135,14 +135,14 @@ void main()  	// Increase ambient when there are more clouds  	vec4 tmpAmbient = ambient; -	tmpAmbient += (1. - tmpAmbient) * cloud_shadow.x * 0.5;  +	tmpAmbient += (1. - tmpAmbient) * cloud_shadow * 0.5;   	// Dim sunlight by cloud shadow percentage -	sunlight *= (1. - cloud_shadow.x); +	sunlight *= (1. - cloud_shadow);  	// Haze color below cloud  	vec4 additiveColorBelowCloud = (	  blue_horizon * blue_weight * (sunlight + tmpAmbient) -				+ (haze_horizon.r * haze_weight) * (sunlight * temp2.x + tmpAmbient) +				+ (haze_horizon * haze_weight) * (sunlight * temp2.x + tmpAmbient)  			 );	  	// CLOUDS @@ -163,13 +163,13 @@ void main()  	vec4 oHazeColorBelowCloud = additiveColorBelowCloud * (1. - temp1);  	// Make a nice cloud density based on the cloud_shadow value that was passed in. -	vary_CloudDensity = 2. * (cloud_shadow.x - 0.25); +	vary_CloudDensity = 2. * (cloud_shadow - 0.25);  	// Texture coords  	vary_texcoord0 = texcoord0;  	vary_texcoord0.xy -= 0.5; -	vary_texcoord0.xy /= cloud_scale.x; +	vary_texcoord0.xy /= cloud_scale;  	vary_texcoord0.xy += 0.5;  	vary_texcoord1 = vary_texcoord0; diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl index 46773cf89f..3788ddaf2d 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl @@ -42,19 +42,17 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; +uniform float haze_horizon; +uniform float haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 max_y; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float max_y;  uniform vec4 glow;  uniform vec4 cloud_color; -uniform vec4 cloud_scale; -  void main()  { @@ -68,7 +66,7 @@ void main()  	// Set altitude  	if (P.y > 0.)  	{ -		P *= (max_y.x / P.y); +		P *= (max_y / P.y);  	}  	else  	{ @@ -87,15 +85,14 @@ void main()  	vec4 sunlight = sunlight_color;  	vec4 light_atten; -  	// Sunlight attenuation effect (hue and brightness) due to atmosphere  	// this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + haze_density.x * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  	// Calculate relative weights -	temp1 = blue_density + haze_density.x; +	temp1 = blue_density + haze_density;  	blue_weight = blue_density / temp1; -	haze_weight = haze_density.x / temp1; +	haze_weight = haze_density / temp1;  	// Compute sunlight from P & lightnorm (for long rays like sky)  	temp2.y = max(0., max(0., Pn.y) * 1.0 + lightnorm.y ); @@ -103,7 +100,7 @@ void main()  	sunlight *= exp( - light_atten * temp2.y);  	// Distance -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1)  	// ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati @@ -128,20 +125,20 @@ void main()  	// Haze color above cloud  	vary_HazeColor = (	  blue_horizon * blue_weight * (sunlight + ambient) -				+ (haze_horizon.r * haze_weight) * (sunlight * temp2.x + ambient) +				+ (haze_horizon * haze_weight) * (sunlight * temp2.x + ambient)  			 );	  	// Increase ambient when there are more clouds  	vec4 tmpAmbient = ambient; -	tmpAmbient += (1. - tmpAmbient) * cloud_shadow.x * 0.5;  +	tmpAmbient += (1. - tmpAmbient) * cloud_shadow * 0.5;   	// Dim sunlight by cloud shadow percentage -	sunlight *= (1. - cloud_shadow.x); +	sunlight *= (1. - cloud_shadow);  	// Haze color below cloud  	vec4 additiveColorBelowCloud = (	  blue_horizon * blue_weight * (sunlight + tmpAmbient) -				+ (haze_horizon.r * haze_weight) * (sunlight * temp2.x + tmpAmbient) +				+ (haze_horizon * haze_weight) * (sunlight * temp2.x + tmpAmbient)  			 );	  	// Final atmosphere additive diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 0f33d40ac3..76bb2b0976 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -42,7 +42,6 @@ RenderGamma					1	0  RenderGlowResolutionPow		1	9  RenderGround				1	1  RenderMaxPartCount			1	8192 -RenderNightBrightness		1	1.0  RenderObjectBump			1	1  RenderLocalLights			1	1  RenderReflectionDetail		1	4 diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index 8142311a55..5e217e000a 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -43,7 +43,6 @@ RenderGlowResolutionPow		1	9  RenderGround				1	1  RenderLocalLights			1	1  RenderMaxPartCount			1	8192 -RenderNightBrightness		1	1.0  RenderObjectBump			1	1  RenderReflectionDetail		1	4  RenderTerrainDetail			1	1 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index 942c043081..915a012a39 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -43,7 +43,6 @@ RenderGlowResolutionPow			1	9  RenderGround					1	1  RenderLocalLights				1	1  RenderMaxPartCount				1	8192 -RenderNightBrightness			1	1.0  RenderObjectBump				1	1  RenderReflectionDetail			1	4  RenderTerrainDetail				1	1 diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt index 278d601860..ae2cf910f2 100644 --- a/indra/newview/featuretable_xp.txt +++ b/indra/newview/featuretable_xp.txt @@ -43,7 +43,6 @@ RenderGlowResolutionPow		1	9  RenderGround				1	1  RenderLocalLights			1	1  RenderMaxPartCount			1	8192 -RenderNightBrightness		1	1.0  RenderObjectBump			1	1  RenderReflectionDetail		1	4  RenderTerrainDetail			1	1 diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index ab9b5ff436..3870a3be2e 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -169,11 +169,7 @@ bool LLAgent::isActionAllowed(const LLSD& sdname)  	const std::string& param = sdname.asString(); -	if (param == "build") -	{ -		retval = gAgent.canEditParcel(); -	} -	else if (param == "speak") +	if (param == "speak")  	{  		if ( gAgent.isVoiceConnected() &&   			LLViewerParcelMgr::getInstance()->allowAgentVoice() && diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 49fbdbf1df..1174d108d2 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1487,6 +1487,9 @@ void LLAppViewer::flushVFSIO()  bool LLAppViewer::cleanup()  { +	//ditch LLVOAvatarSelf instance +	gAgentAvatarp = NULL; +  	// workaround for DEV-35406 crash on shutdown  	LLEventPumps::instance().reset(); diff --git a/indra/newview/lldrawpool.h b/indra/newview/lldrawpool.h index 5a2981e749..64774d06df 100644 --- a/indra/newview/lldrawpool.h +++ b/indra/newview/lldrawpool.h @@ -133,6 +133,7 @@ public:  		PASS_ALPHA,  		PASS_ALPHA_MASK,  		PASS_FULLBRIGHT_ALPHA_MASK, +		PASS_ALPHA_INVISIBLE,  		NUM_RENDER_TYPES,  	}; diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index ddb7d3ceeb..5b62dbc560 100644 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -337,6 +337,7 @@ void LLDrawPoolAlpha::render(S32 pass)  		pushBatches(LLRenderPass::PASS_ALPHA_MASK, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);  		pushBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE); +		pushBatches(LLRenderPass::PASS_ALPHA_INVISIBLE, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);  		if(shaders)   		{ diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp index 8f47d3c5e5..64eb11fc9b 100644 --- a/indra/newview/lldriverparam.cpp +++ b/indra/newview/lldriverparam.cpp @@ -139,7 +139,7 @@ void LLDriverParamInfo::toStream(std::ostream &out)  			}  			else  			{ -				llwarns << "could not get parameter " << driven.mDrivenID << " from avatar " << gAgentAvatarp << " for driver parameter " << getID() << llendl; +				llwarns << "could not get parameter " << driven.mDrivenID << " from avatar " << gAgentAvatarp.get() << " for driver parameter " << getID() << llendl;  			}  			out << std::endl;  		} diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp index 8024755e86..f741b9b810 100644 --- a/indra/newview/llfilepicker.cpp +++ b/indra/newview/llfilepicker.cpp @@ -49,7 +49,7 @@ LLFilePicker LLFilePicker::sInstance;  #if LL_WINDOWS  #define SOUND_FILTER L"Sounds (*.wav)\0*.wav\0"  #define IMAGE_FILTER L"Images (*.tga; *.bmp; *.jpg; *.jpeg; *.png)\0*.tga;*.bmp;*.jpg;*.jpeg;*.png\0" -#define ANIM_FILTER L"Animations (*.bvh)\0*.bvh\0" +#define ANIM_FILTER L"Animations (*.bvh; *.anim)\0*.bvh;*.anim\0"  #define COLLADA_FILTER L"Scene (*.dae)\0*.dae\0"  #ifdef _CORY_TESTING  #define GEOMETRY_FILTER L"SL Geometry (*.slg)\0*.slg\0" @@ -593,8 +593,10 @@ Boolean LLFilePicker::navOpenFilterProc(AEDesc *theItem, void *info, void *callB  						}  						else if (filter == FFLOAD_ANIM)  						{ -							if (fileInfo.filetype != 'BVH ' &&  -								(fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("bvh"), kCFCompareCaseInsensitive) != kCFCompareEqualTo)) +							if (fileInfo.filetype != 'BVH ' && +								fileInfo.filetype != 'ANIM' && +								(fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("bvh"), kCFCompareCaseInsensitive) != kCFCompareEqualTo) && +								fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("anim"), kCFCompareCaseInsensitive) != kCFCompareEqualTo))  							)  							{  								result = false; @@ -1196,10 +1198,14 @@ static std::string add_wav_filter_to_gtkchooser(GtkWindow *picker)  						    LLTrans::getString("sound_files") + " (*.wav)");  } -static std::string add_bvh_filter_to_gtkchooser(GtkWindow *picker) +static std::string add_anim_filter_to_gtkchooser(GtkWindow *picker)  { -	return add_simple_pattern_filter_to_gtkchooser(picker,  "*.bvh", -						       LLTrans::getString("animation_files") + " (*.bvh)"); +	GtkFileFilter *gfilter = gtk_file_filter_new(); +	gtk_file_filter_add_pattern(gfilter, "*.bvh"); +	gtk_file_filter_add_pattern(gfilter, "*.anim"); +	std::string filtername = LLTrans::getString("animation_files") + " (*.bvh; *.anim)"; +	add_common_filters_to_gtkchooser(gfilter, picker, filtername); +	return filtername;  }  static std::string add_collada_filter_to_gtkchooser(GtkWindow *picker) @@ -1351,7 +1357,7 @@ BOOL LLFilePicker::getOpenFile( ELoadFilter filter, bool blocking )  			filtername = add_wav_filter_to_gtkchooser(picker);  			break;  		case FFLOAD_ANIM: -			filtername = add_bvh_filter_to_gtkchooser(picker); +			filtername = add_anim_filter_to_gtkchooser(picker);  			break;  		case FFLOAD_COLLADA:  			filtername = add_collada_filter_to_gtkchooser(picker); diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloaterbvhpreview.cpp index 2a3512e21a..b050a638dc 100644 --- a/indra/newview/llfloateranimpreview.cpp +++ b/indra/newview/llfloaterbvhpreview.cpp @@ -1,6 +1,6 @@  /**  - * @file llfloateranimpreview.cpp - * @brief LLFloaterAnimPreview class implementation + * @file llfloaterbvhpreview.cpp + * @brief LLFloaterBvhPreview class implementation   *   * $LicenseInfo:firstyear=2004&license=viewerlgpl$   * Second Life Viewer Source Code @@ -26,7 +26,7 @@  #include "llviewerprecompiledheaders.h" -#include "llfloateranimpreview.h" +#include "llfloaterbvhpreview.h"  #include "llbvhloader.h"  #include "lldatapacker.h" @@ -115,9 +115,9 @@ std::string STATUS[] =  };  //----------------------------------------------------------------------------- -// LLFloaterAnimPreview() +// LLFloaterBvhPreview()  //----------------------------------------------------------------------------- -LLFloaterAnimPreview::LLFloaterAnimPreview(const std::string& filename) :  +LLFloaterBvhPreview::LLFloaterBvhPreview(const std::string& filename) :   	LLFloaterNameDesc(filename)  {  	mLastMouseX = 0; @@ -153,35 +153,35 @@ LLFloaterAnimPreview::LLFloaterAnimPreview(const std::string& filename) :  //-----------------------------------------------------------------------------  // setAnimCallbacks()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::setAnimCallbacks() +void LLFloaterBvhPreview::setAnimCallbacks()  { -	getChild<LLUICtrl>("playback_slider")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onSliderMove, this)); +	getChild<LLUICtrl>("playback_slider")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onSliderMove, this)); -	getChild<LLUICtrl>("preview_base_anim")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitBaseAnim, this)); +	getChild<LLUICtrl>("preview_base_anim")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitBaseAnim, this));  	getChild<LLUICtrl>("preview_base_anim")->setValue("Standing"); -	getChild<LLUICtrl>("priority")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitPriority, this)); -	getChild<LLUICtrl>("loop_check")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitLoop, this)); -	getChild<LLUICtrl>("loop_in_point")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitLoopIn, this)); -	getChild<LLUICtrl>("loop_in_point")->setValidateBeforeCommit( boost::bind(&LLFloaterAnimPreview::validateLoopIn, this, _1)); -	getChild<LLUICtrl>("loop_out_point")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitLoopOut, this)); -	getChild<LLUICtrl>("loop_out_point")->setValidateBeforeCommit( boost::bind(&LLFloaterAnimPreview::validateLoopOut, this, _1)); +	getChild<LLUICtrl>("priority")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitPriority, this)); +	getChild<LLUICtrl>("loop_check")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitLoop, this)); +	getChild<LLUICtrl>("loop_in_point")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitLoopIn, this)); +	getChild<LLUICtrl>("loop_in_point")->setValidateBeforeCommit( boost::bind(&LLFloaterBvhPreview::validateLoopIn, this, _1)); +	getChild<LLUICtrl>("loop_out_point")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitLoopOut, this)); +	getChild<LLUICtrl>("loop_out_point")->setValidateBeforeCommit( boost::bind(&LLFloaterBvhPreview::validateLoopOut, this, _1)); -	getChild<LLUICtrl>("hand_pose_combo")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitHandPose, this)); +	getChild<LLUICtrl>("hand_pose_combo")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitHandPose, this)); -	getChild<LLUICtrl>("emote_combo")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitEmote, this)); +	getChild<LLUICtrl>("emote_combo")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitEmote, this));  	getChild<LLUICtrl>("emote_combo")->setValue("[None]"); -	getChild<LLUICtrl>("ease_in_time")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitEaseIn, this)); -	getChild<LLUICtrl>("ease_in_time")->setValidateBeforeCommit( boost::bind(&LLFloaterAnimPreview::validateEaseIn, this, _1)); -	getChild<LLUICtrl>("ease_out_time")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitEaseOut, this)); -	getChild<LLUICtrl>("ease_out_time")->setValidateBeforeCommit( boost::bind(&LLFloaterAnimPreview::validateEaseOut, this, _1)); +	getChild<LLUICtrl>("ease_in_time")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitEaseIn, this)); +	getChild<LLUICtrl>("ease_in_time")->setValidateBeforeCommit( boost::bind(&LLFloaterBvhPreview::validateEaseIn, this, _1)); +	getChild<LLUICtrl>("ease_out_time")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitEaseOut, this)); +	getChild<LLUICtrl>("ease_out_time")->setValidateBeforeCommit( boost::bind(&LLFloaterBvhPreview::validateEaseOut, this, _1));  }  //-----------------------------------------------------------------------------  // postBuild()  //----------------------------------------------------------------------------- -BOOL LLFloaterAnimPreview::postBuild() +BOOL LLFloaterBvhPreview::postBuild()  {  	LLKeyframeMotion* motionp = NULL;  	LLBVHLoader* loaderp = NULL; @@ -191,7 +191,7 @@ BOOL LLFloaterAnimPreview::postBuild()  		return FALSE;  	} -	getChild<LLUICtrl>("name_form")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitName, this)); +	getChild<LLUICtrl>("name_form")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitName, this));  	childSetAction("ok_btn", onBtnOK, this);  	setDefaultBtn(); @@ -203,15 +203,15 @@ BOOL LLFloaterAnimPreview::postBuild()  	mPreviewImageRect.set(0.f, 1.f, 1.f, 0.f);  	mPlayButton = getChild<LLButton>( "play_btn"); -	mPlayButton->setClickedCallback(boost::bind(&LLFloaterAnimPreview::onBtnPlay, this)); +	mPlayButton->setClickedCallback(boost::bind(&LLFloaterBvhPreview::onBtnPlay, this));  	mPlayButton->setVisible(true);  	mPauseButton = getChild<LLButton>( "pause_btn"); -	mPauseButton->setClickedCallback(boost::bind(&LLFloaterAnimPreview::onBtnPause, this)); +	mPauseButton->setClickedCallback(boost::bind(&LLFloaterBvhPreview::onBtnPause, this));  	mPauseButton->setVisible(false);  	mStopButton = getChild<LLButton>( "stop_btn"); -	mStopButton->setClickedCallback(boost::bind(&LLFloaterAnimPreview::onBtnStop, this)); +	mStopButton->setClickedCallback(boost::bind(&LLFloaterBvhPreview::onBtnStop, this));  	getChildView("bad_animation_text")->setVisible(FALSE); @@ -363,9 +363,9 @@ BOOL LLFloaterAnimPreview::postBuild()  }  //----------------------------------------------------------------------------- -// LLFloaterAnimPreview() +// LLFloaterBvhPreview()  //----------------------------------------------------------------------------- -LLFloaterAnimPreview::~LLFloaterAnimPreview() +LLFloaterBvhPreview::~LLFloaterBvhPreview()  {  	mAnimPreview = NULL; @@ -375,7 +375,7 @@ LLFloaterAnimPreview::~LLFloaterAnimPreview()  //-----------------------------------------------------------------------------  // draw()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::draw() +void LLFloaterBvhPreview::draw()  {  	LLFloater::draw();  	LLRect r = getRect(); @@ -414,7 +414,7 @@ void LLFloaterAnimPreview::draw()  //-----------------------------------------------------------------------------  // resetMotion()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::resetMotion() +void LLFloaterBvhPreview::resetMotion()  {  	LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();  	BOOL paused = avatarp->areAnimationsPaused(); @@ -450,7 +450,7 @@ void LLFloaterAnimPreview::resetMotion()  //-----------------------------------------------------------------------------  // handleMouseDown()  //----------------------------------------------------------------------------- -BOOL LLFloaterAnimPreview::handleMouseDown(S32 x, S32 y, MASK mask) +BOOL LLFloaterBvhPreview::handleMouseDown(S32 x, S32 y, MASK mask)  {  	if (mPreviewRect.pointInRect(x, y))  	{ @@ -468,7 +468,7 @@ BOOL LLFloaterAnimPreview::handleMouseDown(S32 x, S32 y, MASK mask)  //-----------------------------------------------------------------------------  // handleMouseUp()  //----------------------------------------------------------------------------- -BOOL LLFloaterAnimPreview::handleMouseUp(S32 x, S32 y, MASK mask) +BOOL LLFloaterBvhPreview::handleMouseUp(S32 x, S32 y, MASK mask)  {  	gFocusMgr.setMouseCapture(FALSE);  	gViewerWindow->showCursor(); @@ -478,7 +478,7 @@ BOOL LLFloaterAnimPreview::handleMouseUp(S32 x, S32 y, MASK mask)  //-----------------------------------------------------------------------------  // handleHover()  //----------------------------------------------------------------------------- -BOOL LLFloaterAnimPreview::handleHover(S32 x, S32 y, MASK mask) +BOOL LLFloaterBvhPreview::handleHover(S32 x, S32 y, MASK mask)  {  	MASK local_mask = mask & ~MASK_ALT; @@ -533,7 +533,7 @@ BOOL LLFloaterAnimPreview::handleHover(S32 x, S32 y, MASK mask)  //-----------------------------------------------------------------------------  // handleScrollWheel()  //----------------------------------------------------------------------------- -BOOL LLFloaterAnimPreview::handleScrollWheel(S32 x, S32 y, S32 clicks) +BOOL LLFloaterBvhPreview::handleScrollWheel(S32 x, S32 y, S32 clicks)  {  	mAnimPreview->zoom((F32)clicks * -0.2f);  	mAnimPreview->requestUpdate(); @@ -544,7 +544,7 @@ BOOL LLFloaterAnimPreview::handleScrollWheel(S32 x, S32 y, S32 clicks)  //-----------------------------------------------------------------------------  // onMouseCaptureLost()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onMouseCaptureLost() +void LLFloaterBvhPreview::onMouseCaptureLost()  {  	gViewerWindow->showCursor();  } @@ -552,7 +552,7 @@ void LLFloaterAnimPreview::onMouseCaptureLost()  //-----------------------------------------------------------------------------  // onBtnPlay()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onBtnPlay() +void LLFloaterBvhPreview::onBtnPlay()  {  	if (!getEnabled())  		return; @@ -576,7 +576,7 @@ void LLFloaterAnimPreview::onBtnPlay()  //-----------------------------------------------------------------------------  // onBtnPause()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onBtnPause() +void LLFloaterBvhPreview::onBtnPause()  {  	if (!getEnabled())  		return; @@ -598,7 +598,7 @@ void LLFloaterAnimPreview::onBtnPause()  //-----------------------------------------------------------------------------  // onBtnStop()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onBtnStop() +void LLFloaterBvhPreview::onBtnStop()  {  	if (!getEnabled())  		return; @@ -614,7 +614,7 @@ void LLFloaterAnimPreview::onBtnStop()  //-----------------------------------------------------------------------------  // onSliderMove()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onSliderMove() +void LLFloaterBvhPreview::onSliderMove()  {  	if (!getEnabled())  		return; @@ -639,7 +639,7 @@ void LLFloaterAnimPreview::onSliderMove()  //-----------------------------------------------------------------------------  // onCommitBaseAnim()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitBaseAnim() +void LLFloaterBvhPreview::onCommitBaseAnim()  {  	if (!getEnabled())  		return; @@ -668,7 +668,7 @@ void LLFloaterAnimPreview::onCommitBaseAnim()  //-----------------------------------------------------------------------------  // onCommitLoop()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitLoop() +void LLFloaterBvhPreview::onCommitLoop()  {  	if (!getEnabled())  		return; @@ -687,7 +687,7 @@ void LLFloaterAnimPreview::onCommitLoop()  //-----------------------------------------------------------------------------  // onCommitLoopIn()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitLoopIn() +void LLFloaterBvhPreview::onCommitLoopIn()  {  	if (!getEnabled())  		return; @@ -707,7 +707,7 @@ void LLFloaterAnimPreview::onCommitLoopIn()  //-----------------------------------------------------------------------------  // onCommitLoopOut()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitLoopOut() +void LLFloaterBvhPreview::onCommitLoopOut()  {  	if (!getEnabled())  		return; @@ -727,7 +727,7 @@ void LLFloaterAnimPreview::onCommitLoopOut()  //-----------------------------------------------------------------------------  // onCommitName()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitName() +void LLFloaterBvhPreview::onCommitName()  {  	if (!getEnabled())  		return; @@ -746,7 +746,7 @@ void LLFloaterAnimPreview::onCommitName()  //-----------------------------------------------------------------------------  // onCommitHandPose()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitHandPose() +void LLFloaterBvhPreview::onCommitHandPose()  {  	if (!getEnabled())  		return; @@ -757,7 +757,7 @@ void LLFloaterAnimPreview::onCommitHandPose()  //-----------------------------------------------------------------------------  // onCommitEmote()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitEmote() +void LLFloaterBvhPreview::onCommitEmote()  {  	if (!getEnabled())  		return; @@ -768,7 +768,7 @@ void LLFloaterAnimPreview::onCommitEmote()  //-----------------------------------------------------------------------------  // onCommitPriority()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitPriority() +void LLFloaterBvhPreview::onCommitPriority()  {  	if (!getEnabled())  		return; @@ -782,7 +782,7 @@ void LLFloaterAnimPreview::onCommitPriority()  //-----------------------------------------------------------------------------  // onCommitEaseIn()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitEaseIn() +void LLFloaterBvhPreview::onCommitEaseIn()  {  	if (!getEnabled())  		return; @@ -797,7 +797,7 @@ void LLFloaterAnimPreview::onCommitEaseIn()  //-----------------------------------------------------------------------------  // onCommitEaseOut()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitEaseOut() +void LLFloaterBvhPreview::onCommitEaseOut()  {  	if (!getEnabled())  		return; @@ -812,7 +812,7 @@ void LLFloaterAnimPreview::onCommitEaseOut()  //-----------------------------------------------------------------------------  // validateEaseIn()  //----------------------------------------------------------------------------- -bool LLFloaterAnimPreview::validateEaseIn(const LLSD& data) +bool LLFloaterBvhPreview::validateEaseIn(const LLSD& data)  {  	if (!getEnabled())  		return false; @@ -832,7 +832,7 @@ bool LLFloaterAnimPreview::validateEaseIn(const LLSD& data)  //-----------------------------------------------------------------------------  // validateEaseOut()  //----------------------------------------------------------------------------- -bool LLFloaterAnimPreview::validateEaseOut(const LLSD& data) +bool LLFloaterBvhPreview::validateEaseOut(const LLSD& data)  {  	if (!getEnabled())  		return false; @@ -852,7 +852,7 @@ bool LLFloaterAnimPreview::validateEaseOut(const LLSD& data)  //-----------------------------------------------------------------------------  // validateLoopIn()  //----------------------------------------------------------------------------- -bool LLFloaterAnimPreview::validateLoopIn(const LLSD& data) +bool LLFloaterBvhPreview::validateLoopIn(const LLSD& data)  {  	if (!getEnabled())  		return false; @@ -880,7 +880,7 @@ bool LLFloaterAnimPreview::validateLoopIn(const LLSD& data)  //-----------------------------------------------------------------------------  // validateLoopOut()  //----------------------------------------------------------------------------- -bool LLFloaterAnimPreview::validateLoopOut(const LLSD& data) +bool LLFloaterBvhPreview::validateLoopOut(const LLSD& data)  {  	if (!getEnabled())  		return false; @@ -909,7 +909,7 @@ bool LLFloaterAnimPreview::validateLoopOut(const LLSD& data)  //-----------------------------------------------------------------------------  // refresh()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::refresh() +void LLFloaterBvhPreview::refresh()  {  	// Are we showing the play button (default) or the pause button?  	bool show_play = true; @@ -958,9 +958,9 @@ void LLFloaterAnimPreview::refresh()  //-----------------------------------------------------------------------------  // onBtnOK()  //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onBtnOK(void* userdata) +void LLFloaterBvhPreview::onBtnOK(void* userdata)  { -	LLFloaterAnimPreview* floaterp = (LLFloaterAnimPreview*)userdata; +	LLFloaterBvhPreview* floaterp = (LLFloaterBvhPreview*)userdata;  	if (!floaterp->getEnabled()) return;  	if (floaterp->mAnimPreview) diff --git a/indra/newview/llfloateranimpreview.h b/indra/newview/llfloaterbvhpreview.h index f1ffb6547f..bae98c95d9 100644 --- a/indra/newview/llfloateranimpreview.h +++ b/indra/newview/llfloaterbvhpreview.h @@ -1,6 +1,6 @@  /**  - * @file llfloateranimpreview.h - * @brief LLFloaterAnimPreview class definition + * @file llfloaterbvhpreview.h + * @brief LLFloaterBvhPreview class definition   *   * $LicenseInfo:firstyear=2004&license=viewerlgpl$   * Second Life Viewer Source Code @@ -24,8 +24,8 @@   * $/LicenseInfo$   */ -#ifndef LL_LLFLOATERANIMPREVIEW_H -#define LL_LLFLOATERANIMPREVIEW_H +#ifndef LL_LLFLOATERBVHPREVIEW_H +#define LL_LLFLOATERBVHPREVIEW_H  #include "llassettype.h"  #include "llfloaternamedesc.h" @@ -67,11 +67,11 @@ protected:  	LLPointer<LLVOAvatar>			mDummyAvatar;  }; -class LLFloaterAnimPreview : public LLFloaterNameDesc +class LLFloaterBvhPreview : public LLFloaterNameDesc  {  public: -	LLFloaterAnimPreview(const std::string& filename); -	virtual ~LLFloaterAnimPreview(); +	LLFloaterBvhPreview(const std::string& filename); +	virtual ~LLFloaterBvhPreview();  	BOOL postBuild(); @@ -128,4 +128,4 @@ protected:  	std::map<std::string, LLUUID>	mIDList;  }; -#endif  // LL_LLFLOATERANIMPREVIEW_H +#endif  // LL_LLFLOATERBVHPREVIEW_H diff --git a/indra/newview/llfloatereditsky.cpp b/indra/newview/llfloatereditsky.cpp index abee7b5dc9..352361ce9e 100644 --- a/indra/newview/llfloatereditsky.cpp +++ b/indra/newview/llfloatereditsky.cpp @@ -151,8 +151,8 @@ void LLFloaterEditSky::initCallbacks(void)  	getChild<LLUICtrl>("WLBlueHorizon")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, ¶m_mgr.mBlueHorizon));  	// haze density, horizon, mult, and altitude -	getChild<LLUICtrl>("WLHazeDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, ¶m_mgr.mHazeDensity)); -	getChild<LLUICtrl>("WLHazeHorizon")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, ¶m_mgr.mHazeHorizon)); +	getChild<LLUICtrl>("WLHazeDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, ¶m_mgr.mHazeDensity)); +	getChild<LLUICtrl>("WLHazeHorizon")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, ¶m_mgr.mHazeHorizon));  	getChild<LLUICtrl>("WLDensityMult")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, ¶m_mgr.mDensityMult));  	getChild<LLUICtrl>("WLMaxAltitude")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, ¶m_mgr.mMaxAlt)); @@ -220,15 +220,14 @@ void LLFloaterEditSky::syncControls()  	setColorSwatch("WLBlueHorizon", param_mgr->mBlueHorizon, WL_BLUE_HORIZON_DENSITY_SCALE);  	// haze density, horizon, mult, and altitude -	param_mgr->mHazeDensity = cur_params.getVector(param_mgr->mHazeDensity.mName, err); -	childSetValue("WLHazeDensity", param_mgr->mHazeDensity.r); -	param_mgr->mHazeHorizon = cur_params.getVector(param_mgr->mHazeHorizon.mName, err); -	childSetValue("WLHazeHorizon", param_mgr->mHazeHorizon.r); -	param_mgr->mDensityMult = cur_params.getVector(param_mgr->mDensityMult.mName, err); -	childSetValue("WLDensityMult", param_mgr->mDensityMult.x * -		param_mgr->mDensityMult.mult); -	param_mgr->mMaxAlt = cur_params.getVector(param_mgr->mMaxAlt.mName, err); -	childSetValue("WLMaxAltitude", param_mgr->mMaxAlt.x); +	param_mgr->mHazeDensity = cur_params.getFloat(param_mgr->mHazeDensity.mName, err); +	childSetValue("WLHazeDensity", (F32) param_mgr->mHazeDensity); +	param_mgr->mHazeHorizon = cur_params.getFloat(param_mgr->mHazeHorizon.mName, err); +	childSetValue("WLHazeHorizon", (F32) param_mgr->mHazeHorizon); +	param_mgr->mDensityMult = cur_params.getFloat(param_mgr->mDensityMult.mName, err); +	childSetValue("WLDensityMult", ((F32) param_mgr->mDensityMult) * param_mgr->mDensityMult.mult); +	param_mgr->mMaxAlt = cur_params.getFloat(param_mgr->mMaxAlt.mName, err); +	childSetValue("WLMaxAltitude", (F32) param_mgr->mMaxAlt);  	// blue density  	param_mgr->mBlueDensity = cur_params.getVector(param_mgr->mBlueDensity.mName, err); @@ -273,10 +272,10 @@ void LLFloaterEditSky::syncControls()  	childSetValue("WLCloudDetailDensity", param_mgr->mCloudDetail.b);  	// Cloud extras -	param_mgr->mCloudCoverage = cur_params.getVector(param_mgr->mCloudCoverage.mName, err); -	param_mgr->mCloudScale = cur_params.getVector(param_mgr->mCloudScale.mName, err); -	childSetValue("WLCloudCoverage", param_mgr->mCloudCoverage.x); -	childSetValue("WLCloudScale", param_mgr->mCloudScale.x); +	param_mgr->mCloudCoverage = cur_params.getFloat(param_mgr->mCloudCoverage.mName, err); +	param_mgr->mCloudScale = cur_params.getFloat(param_mgr->mCloudScale.mName, err); +	childSetValue("WLCloudCoverage", (F32) param_mgr->mCloudCoverage); +	childSetValue("WLCloudScale", (F32) param_mgr->mCloudScale);  	// cloud scrolling  	bool lockX = !param_mgr->mCurParams.getEnableCloudScrollX(); @@ -306,13 +305,13 @@ void LLFloaterEditSky::syncControls()  	childSetValue("WLCloudScrollX", param_mgr->mCurParams.getCloudScrollX() - 10.0f);  	childSetValue("WLCloudScrollY", param_mgr->mCurParams.getCloudScrollY() - 10.0f); -	param_mgr->mDistanceMult = cur_params.getVector(param_mgr->mDistanceMult.mName, err); -	childSetValue("WLDistanceMult", param_mgr->mDistanceMult.x); +	param_mgr->mDistanceMult = cur_params.getFloat(param_mgr->mDistanceMult.mName, err); +	childSetValue("WLDistanceMult", (F32) param_mgr->mDistanceMult);  	// Tweak extras -	param_mgr->mWLGamma = cur_params.getVector(param_mgr->mWLGamma.mName, err); -	childSetValue("WLGamma", param_mgr->mWLGamma.x); +	param_mgr->mWLGamma = cur_params.getFloat(param_mgr->mWLGamma.mName, err); +	childSetValue("WLGamma", (F32) param_mgr->mWLGamma);  	childSetValue("WLStarAlpha", param_mgr->mCurParams.getStarBrightness());  } diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 9122e5a8f5..7448f2bb2a 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -4525,7 +4525,17 @@ void LLModelPreview::updateStatusMessages()  		}  	} -	if (mFMP->childGetValue("physics_lod_combo").asString() == "From file") +	 +	LLCtrlSelectionInterface* iface = fmp->childGetSelectionInterface("physics_lod_combo"); +	S32 which_mode = 0;  +	S32 file_mode = 1; +	if (iface) +	{ +		which_mode = iface->getFirstSelectedIndex(); +		file_mode = iface->getItemCount() - 1; +	} + +	if (which_mode == file_mode)  	{  		mFMP->childEnable("physics_file");  		mFMP->childEnable("physics_browse"); diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp index 66f0fc3cd7..27b1c3b9cd 100644 --- a/indra/newview/llfloaternamedesc.cpp +++ b/indra/newview/llfloaternamedesc.cpp @@ -207,6 +207,25 @@ BOOL LLFloaterSoundPreview::postBuild()  //----------------------------------------------------------------------------- +// LLFloaterAnimPreview() +//----------------------------------------------------------------------------- + +LLFloaterAnimPreview::LLFloaterAnimPreview(const LLSD& filename ) +	: LLFloaterNameDesc(filename) +{ +} + +BOOL LLFloaterAnimPreview::postBuild() +{ +	if (!LLFloaterNameDesc::postBuild()) +	{ +		return FALSE; +	} +	getChild<LLUICtrl>("ok_btn")->setCommitCallback(boost::bind(&LLFloaterNameDesc::onBtnOK, this)); +	return TRUE; +} + +//-----------------------------------------------------------------------------  // LLFloaterScriptPreview()  //----------------------------------------------------------------------------- diff --git a/indra/newview/llfloaternamedesc.h b/indra/newview/llfloaternamedesc.h index 69bbccaf80..41643681ac 100644 --- a/indra/newview/llfloaternamedesc.h +++ b/indra/newview/llfloaternamedesc.h @@ -64,6 +64,13 @@ public:  	virtual BOOL postBuild();  }; +class LLFloaterAnimPreview : public LLFloaterNameDesc +{ +public: +	LLFloaterAnimPreview(const LLSD& filename ); +	virtual BOOL postBuild(); +}; +  class LLFloaterScriptPreview : public LLFloaterNameDesc  {  public: diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp index a0d1a32e12..b691db1049 100644 --- a/indra/newview/llfloaterscriptdebug.cpp +++ b/indra/newview/llfloaterscriptdebug.cpp @@ -106,7 +106,11 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std:  	if (objectp)  	{  		objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", TRUE, LLViewerTexture::BOOST_UI)); -		floater_label = llformat("%s(%.2f, %.2f)", user_name.c_str(), objectp->getPositionRegion().mV[VX], objectp->getPositionRegion().mV[VY]); +		floater_label = llformat("%s(%.0f, %.0f, %.0f)", +						user_name.c_str(), +						objectp->getPositionRegion().mV[VX], +						objectp->getPositionRegion().mV[VY], +						objectp->getPositionRegion().mV[VZ]);  	}  	else  	{ diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index a856bd0bdc..f621475193 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -2458,7 +2458,10 @@ void LLIMMgr::addMessage(  		make_ui_sound("UISndNewIncomingIMSession");  	} -	if (!LLMuteList::getInstance()->isMuted(other_participant_id, LLMute::flagTextChat)) +	bool skip_message = (gSavedSettings.getBOOL("VoiceCallsFriendsOnly") && +		LLAvatarTracker::instance().getBuddyInfo(other_participant_id) == NULL); + +	if (!LLMuteList::getInstance()->isMuted(other_participant_id, LLMute::flagTextChat) && !skip_message)  	{  		LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, msg);  	} diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index cebe93f042..3b506d72dd 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -73,7 +73,7 @@  #include "llwearablelist.h"  // Marketplace outbox current disabled -#define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU	0 +#define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU	1  #define ENABLE_MERCHANT_SEND_TO_MARKETPLACE_CONTEXT_MENU 0  #define BLOCK_WORN_ITEMS_IN_OUTBOX 1 @@ -4633,14 +4633,14 @@ void LLAnimationBridge::performAction(LLInventoryModel* model, std::string actio  	{  		if (getItem())  		{ -			LLPreviewAnim::e_activation_type activate = LLPreviewAnim::NONE; -			if ("playworld" == action) activate = LLPreviewAnim::PLAY; -			if ("playlocal" == action) activate = LLPreviewAnim::AUDITION; +			LLSD::String activate = "NONE"; +			if ("playworld" == action) activate = "Inworld"; +			if ("playlocal" == action) activate = "Locally";  			LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID));  			if (preview)  			{ -				preview->activate(activate); +				preview->play(activate);  			}  		}  	} diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp index a3f0a6062c..93dd82957f 100644 --- a/indra/newview/llmarketplacefunctions.cpp +++ b/indra/newview/llmarketplacefunctions.cpp @@ -30,6 +30,7 @@  #include "llagent.h"  #include "llhttpclient.h" +#include "lltimer.h"  #include "lltrans.h"  #include "llviewercontrol.h"  #include "llviewermedia.h" @@ -115,6 +116,9 @@ namespace LLMarketplaceImport  	static U32 sImportResultStatus = 0;  	static LLSD sImportResults = LLSD::emptyMap(); +	static LLTimer slmGetTimer; +	static LLTimer slmPostTimer; +  	// Responders  	class LLImportPostResponder : public LLHTTPClient::Responder @@ -124,11 +128,15 @@ namespace LLMarketplaceImport  		void completed(U32 status, const std::string& reason, const LLSD& content)  		{ +			slmPostTimer.stop(); +  			if (gSavedSettings.getBOOL("InventoryOutboxLogging"))  			{  				llinfos << " SLM POST status: " << status << llendl;  				llinfos << " SLM POST reason: " << reason << llendl;  				llinfos << " SLM POST content: " << content.asString() << llendl; + +				llinfos << " SLM POST timer: " << slmPostTimer.getElapsedTimeF32() << llendl;  			}  			if ((status == MarketplaceErrorCodes::IMPORT_REDIRECT) || @@ -167,11 +175,15 @@ namespace LLMarketplaceImport  		void completed(U32 status, const std::string& reason, const LLSD& content)  		{ +			slmGetTimer.stop(); +  			if (gSavedSettings.getBOOL("InventoryOutboxLogging"))  			{  				llinfos << " SLM GET status: " << status << llendl;  				llinfos << " SLM GET reason: " << reason << llendl;  				llinfos << " SLM GET content: " << content.asString() << llendl; + +				llinfos << " SLM GET timer: " << slmGetTimer.getElapsedTimeF32() << llendl;  			}  			if ((status == MarketplaceErrorCodes::IMPORT_AUTHENTICATION_ERROR) || @@ -247,6 +259,7 @@ namespace LLMarketplaceImport  			llinfos << " SLM GET: " << url << llendl;  		} +		slmGetTimer.start();  		LLHTTPClient::get(url, new LLImportGetResponder(), LLViewerMedia::getHeaders());  		return true; @@ -277,6 +290,7 @@ namespace LLMarketplaceImport  			llinfos << " SLM GET: " << url << llendl;  		} +		slmGetTimer.start();  		LLHTTPClient::get(url, new LLImportGetResponder(), headers);  		return true; @@ -310,6 +324,7 @@ namespace LLMarketplaceImport  			llinfos << " SLM POST: " << url << llendl;  		} +		slmPostTimer.start();  		LLHTTPClient::post(url, LLSD(), new LLImportPostResponder(), headers);  		return true; diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index b02bf79a28..bd20210190 100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -728,7 +728,7 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)  			if (!http_url.empty())  			{				  				ret = mCurlRequest->getByteRange(http_url, headers, offset, size, -										   new LLMeshSkinInfoResponder(mesh_id, offset, size)); +												 new LLMeshSkinInfoResponder(mesh_id, offset, size));  				if(ret)  				{  					LLMeshRepository::sHTTPRequestCount++; @@ -805,7 +805,7 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)  			if (!http_url.empty())  			{				  				ret = mCurlRequest->getByteRange(http_url, headers, offset, size, -										   new LLMeshDecompositionResponder(mesh_id, offset, size)); +												 new LLMeshDecompositionResponder(mesh_id, offset, size));  				if(ret)  				{  					LLMeshRepository::sHTTPRequestCount++; @@ -881,7 +881,7 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)  			if (!http_url.empty())  			{				  				ret = mCurlRequest->getByteRange(http_url, headers, offset, size, -										   new LLMeshPhysicsShapeResponder(mesh_id, offset, size)); +												 new LLMeshPhysicsShapeResponder(mesh_id, offset, size));  				if(ret)  				{ @@ -1093,17 +1093,19 @@ bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* dat  bool LLMeshRepoThread::lodReceived(const LLVolumeParams& mesh_params, S32 lod, U8* data, S32 data_size)  { -	LLVolume* volume = new LLVolume(mesh_params, LLVolumeLODGroup::getVolumeScaleFromDetail(lod)); +	LLPointer<LLVolume> volume = new LLVolume(mesh_params, LLVolumeLODGroup::getVolumeScaleFromDetail(lod));  	std::string mesh_string((char*) data, data_size);  	std::istringstream stream(mesh_string);  	if (volume->unpackVolumeFaces(stream, data_size))  	{ -		LoadedMesh mesh(volume, mesh_params, lod);  		if (volume->getNumFaces() > 0)  		{ -			LLMutexLock lock(mMutex); -			mLoadedQ.push(mesh); +			LoadedMesh mesh(volume, mesh_params, lod); +			{ +				LLMutexLock lock(mMutex); +				mLoadedQ.push(mesh); +			}  			return true;  		}  	} diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 15d5d7c162..1bda7640bd 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -74,6 +74,8 @@ const F32 DOT_SCALE = 0.75f;  const F32 MIN_PICK_SCALE = 2.f;  const S32 MOUSE_DRAG_SLOP = 2;		// How far the mouse needs to move before we think it's a drag +const F64 COARSEUPDATE_MAX_Z = 1020.0f; +  LLNetMap::LLNetMap (const Params & p)  :	LLUICtrl (p),  	mBackgroundColor (p.bg_color()), @@ -300,7 +302,8 @@ void LLNetMap::draw()  		}  		LLVector3 map_center_agent = gAgent.getPosAgentFromGlobal(mObjectImageCenterGlobal); -		map_center_agent -= gAgentCamera.getCameraPositionAgent(); +		LLVector3 camera_position = gAgentCamera.getCameraPositionAgent(); +		map_center_agent -= camera_position;  		map_center_agent.mV[VX] *= mScale/region_width;  		map_center_agent.mV[VY] *= mScale/region_width; @@ -321,9 +324,6 @@ void LLNetMap::draw()  		gGL.popMatrix(); -		LLVector3d pos_global; -		LLVector3 pos_map; -  		// Mouse pointer in local coordinates  		S32 local_mouse_x;  		S32 local_mouse_y; @@ -333,90 +333,67 @@ void LLNetMap::draw()  		F32 closest_dist_squared = F32_MAX; // value will be overridden in the loop  		F32 min_pick_dist_squared = (mDotRadius * MIN_PICK_SCALE) * (mDotRadius * MIN_PICK_SCALE); +		LLVector3 pos_map; +		uuid_vec_t avatar_ids; +		std::vector<LLVector3d> positions; +		bool unknown_relative_z; + +		LLWorld::getInstance()->getAvatars(&avatar_ids, &positions, gAgentCamera.getCameraPositionGlobal()); +  		// Draw avatars -		for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); -			 iter != LLWorld::getInstance()->getRegionList().end(); ++iter) +		for (U32 i = 0; i < avatar_ids.size(); i++)  		{ -			LLViewerRegion* regionp = *iter; -			const LLVector3d& origin_global = regionp->getOriginGlobal(); - -			S32 count = regionp->mMapAvatars.count(); -			S32 i; -			LLVector3 pos_local; -			U32 compact_local; -			U8 bits; -			// TODO: it'd be very cool to draw these in sorted order from lowest Z to highest. -			// just be careful to sort the avatar IDs along with the positions. -MG -			for (i = 0; i < count; i++) -			{ -				compact_local = regionp->mMapAvatars.get(i); +			pos_map = globalPosToView(positions[i]); +			LLUUID uuid = avatar_ids[i]; -				bits = compact_local & 0xFF; -				pos_local.mV[VZ] = F32(bits) * 4.f; -				compact_local >>= 8; +			bool show_as_friend = (LLAvatarTracker::instance().getBuddyInfo(uuid) != NULL); -				bits = compact_local & 0xFF; -				pos_local.mV[VY] = (F32)bits; -				compact_local >>= 8; +			LLColor4 color = show_as_friend ? map_avatar_friend_color : map_avatar_color; -				bits = compact_local & 0xFF; -				pos_local.mV[VX] = (F32)bits; +			unknown_relative_z = positions[i].mdV[VZ] == COARSEUPDATE_MAX_Z && +					camera_position.mV[VZ] >= COARSEUPDATE_MAX_Z; -				pos_global.setVec( pos_local ); -				pos_global += origin_global; +			LLWorldMapView::drawAvatar( +				pos_map.mV[VX], pos_map.mV[VY],  +				color,  +				pos_map.mV[VZ], mDotRadius, +				unknown_relative_z); -				pos_map = globalPosToView(pos_global); - -				LLUUID uuid(NULL); -				BOOL show_as_friend = FALSE; -				if( i < regionp->mMapAvatarIDs.count()) +			if(uuid.notNull()) +			{ +				bool selected = false; +				uuid_vec_t::iterator sel_iter = gmSelected.begin(); +				for (; sel_iter != gmSelected.end(); sel_iter++)  				{ -					uuid = regionp->mMapAvatarIDs.get(i); -					show_as_friend = (LLAvatarTracker::instance().getBuddyInfo(uuid) != NULL); +					if(*sel_iter == uuid) +					{ +						selected = true; +						break; +					}  				} - -				LLColor4 color = show_as_friend ? map_avatar_friend_color : map_avatar_color; -				LLWorldMapView::drawAvatar( -					pos_map.mV[VX], pos_map.mV[VY],  -					color,  -					pos_map.mV[VZ], mDotRadius); - -				if(uuid.notNull()) +				if(selected)  				{ -					bool selected = false; -					uuid_vec_t::iterator sel_iter = gmSelected.begin(); -					for (; sel_iter != gmSelected.end(); sel_iter++) +					if( (pos_map.mV[VX] < 0) || +						(pos_map.mV[VY] < 0) || +						(pos_map.mV[VX] >= getRect().getWidth()) || +						(pos_map.mV[VY] >= getRect().getHeight()) )  					{ -						if(*sel_iter == uuid) -						{ -							selected = true; -							break; -						} -					} -					if(selected) +						S32 x = llround( pos_map.mV[VX] ); +						S32 y = llround( pos_map.mV[VY] ); +						LLWorldMapView::drawTrackingCircle( getRect(), x, y, color, 1, 10); +					} else  					{ -						if( (pos_map.mV[VX] < 0) || -							(pos_map.mV[VY] < 0) || -							(pos_map.mV[VX] >= getRect().getWidth()) || -							(pos_map.mV[VY] >= getRect().getHeight()) ) -						{ -							S32 x = llround( pos_map.mV[VX] ); -							S32 y = llround( pos_map.mV[VY] ); -							LLWorldMapView::drawTrackingCircle( getRect(), x, y, color, 1, 10); -						} else -						{ -							LLWorldMapView::drawTrackingDot(pos_map.mV[VX],pos_map.mV[VY],color,0.f); -						} +						LLWorldMapView::drawTrackingDot(pos_map.mV[VX],pos_map.mV[VY],color,0.f);  					}  				} +			} -				F32	dist_to_cursor_squared = dist_vec_squared(LLVector2(pos_map.mV[VX], pos_map.mV[VY]), -											  LLVector2(local_mouse_x,local_mouse_y)); -				if(dist_to_cursor_squared < min_pick_dist_squared && dist_to_cursor_squared < closest_dist_squared) -				{ -					closest_dist_squared = dist_to_cursor_squared; -					mClosestAgentToCursor = regionp->mMapAvatarIDs.get(i); -				} +			F32	dist_to_cursor_squared = dist_vec_squared(LLVector2(pos_map.mV[VX], pos_map.mV[VY]), +										  LLVector2(local_mouse_x,local_mouse_y)); +			if(dist_to_cursor_squared < min_pick_dist_squared && dist_to_cursor_squared < closest_dist_squared) +			{ +				closest_dist_squared = dist_to_cursor_squared; +				mClosestAgentToCursor = uuid;  			}  		} @@ -440,7 +417,7 @@ void LLNetMap::draw()  		}  		// Draw dot for self avatar position -		pos_global = gAgent.getPositionGlobal(); +		LLVector3d pos_global = gAgent.getPositionGlobal();  		pos_map = globalPosToView(pos_global);  		S32 dot_width = llround(mDotRadius * 2.f);  		LLUIImagePtr you = LLWorldMapView::sAvatarYouLargeImage; @@ -514,9 +491,11 @@ void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent)  	createObjectImage();  } -LLVector3 LLNetMap::globalPosToView( const LLVector3d& global_pos ) +LLVector3 LLNetMap::globalPosToView(const LLVector3d& global_pos)  { -	LLVector3d relative_pos_global = global_pos - gAgentCamera.getCameraPositionGlobal(); +	LLVector3d camera_position = gAgentCamera.getCameraPositionGlobal(); + +	LLVector3d relative_pos_global = global_pos - camera_position;  	LLVector3 pos_local;  	pos_local.setVec(relative_pos_global);  // convert to floats from doubles @@ -541,7 +520,7 @@ LLVector3 LLNetMap::globalPosToView( const LLVector3d& global_pos )  void LLNetMap::drawTracking(const LLVector3d& pos_global, const LLColor4& color,   							BOOL draw_arrow )  { -	LLVector3 pos_local = globalPosToView( pos_global ); +	LLVector3 pos_local = globalPosToView(pos_global);  	if( (pos_local.mV[VX] < 0) ||  		(pos_local.mV[VY] < 0) ||  		(pos_local.mV[VX] >= getRect().getWidth()) || diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp index 8e8b530e13..35ac0537a3 100644 --- a/indra/newview/llpreviewanim.cpp +++ b/indra/newview/llpreviewanim.cpp @@ -43,19 +43,7 @@ extern LLAgent gAgent;  LLPreviewAnim::LLPreviewAnim(const LLSD& key)  	: LLPreview( key )  { -} - -// static -void LLPreviewAnim::endAnimCallback( void *userdata ) -{ -	LLHandle<LLFloater>* handlep = ((LLHandle<LLFloater>*)userdata); -	LLFloater* self = handlep->get(); -	delete handlep; // done with the handle -	if (self) -	{ -		self->getChild<LLUICtrl>("Anim play btn")->setValue(FALSE); -		self->getChild<LLUICtrl>("Anim audition btn")->setValue(FALSE); -	} +	mCommitCallbackRegistrar.add("PreviewAnim.Play", boost::bind(&LLPreviewAnim::play, this, _2));  }  // virtual @@ -68,106 +56,115 @@ BOOL LLPreviewAnim::postBuild()  		getChild<LLUICtrl>("desc")->setValue(item->getDescription());  	} -	childSetAction("Anim play btn",playAnim, this); -	childSetAction("Anim audition btn",auditionAnim, this); -  	childSetCommitCallback("desc", LLPreview::onText, this);  	getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); -	 +  	return LLPreview::postBuild();  } -void LLPreviewAnim::activate(e_activation_type type) +// static +// llinventorybridge also calls into here +void LLPreviewAnim::play(const LLSD& param)  { -	switch ( type )  +	const LLInventoryItem *item = getItem(); + +	if(item)  	{ -		case PLAY: +		LLUUID itemID=item->getAssetUUID(); + +		std::string btn_name = param.asString(); +		LLButton* btn_inuse; +		LLButton* btn_other; + +		if ("Inworld" == btn_name)  		{ -			playAnim( (void *) this ); -			break; +			btn_inuse = getChild<LLButton>("Inworld"); +			btn_other = getChild<LLButton>("Locally");  		} -		case AUDITION: +		else if ("Locally" == btn_name)  		{ -			auditionAnim( (void *) this ); -			break; +			btn_inuse = getChild<LLButton>("Locally"); +			btn_other = getChild<LLButton>("Inworld");  		} -		default: +		else  		{ -		//do nothing +			return;  		} -	} -} - -// static -void LLPreviewAnim::playAnim( void *userdata ) -{ -	LLPreviewAnim* self = (LLPreviewAnim*) userdata; -	const LLInventoryItem *item = self->getItem(); -	if(item) -	{ -		LLUUID itemID=item->getAssetUUID(); +		if (btn_inuse) +		{ +			btn_inuse->toggleState(); +		} -		LLButton* btn = self->getChild<LLButton>("Anim play btn"); -		if (btn) +		if (btn_other)  		{ -			btn->toggleState(); +			btn_other->setEnabled(false);  		} -		if (self->getChild<LLUICtrl>("Anim play btn")->getValue().asBoolean() )  +		if (getChild<LLUICtrl>(btn_name)->getValue().asBoolean() )   		{ -			self->mPauseRequest = NULL; -			gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_START); +			if("Inworld" == btn_name) +			{ +				gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_START); +			} +			else +			{ +				gAgentAvatarp->startMotion(item->getAssetUUID()); +			} +  			LLMotion* motion = gAgentAvatarp->findMotion(itemID);  			if (motion)  			{ -				motion->setDeactivateCallback(&endAnimCallback, (void *)(new LLHandle<LLFloater>(self->getHandle()))); +				mItemID = itemID; +				mDidStart = false;  			}  		}  		else  		{  			gAgentAvatarp->stopMotion(itemID);  			gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_STOP); + +			if (btn_other) +			{ +				btn_other->setEnabled(true); +			}  		}  	}  } -// static -void LLPreviewAnim::auditionAnim( void *userdata ) +// virtual +void LLPreviewAnim::draw()  { -	LLPreviewAnim* self = (LLPreviewAnim*) userdata; -	const LLInventoryItem *item = self->getItem(); - -	if(item) +	LLPreview::draw(); +	if (!this->mItemID.isNull())  	{ -		LLUUID itemID=item->getAssetUUID(); - -		LLButton* btn = self->getChild<LLButton>("Anim audition btn"); -		if (btn) -		{ -			btn->toggleState(); -		} -		 -		if (self->getChild<LLUICtrl>("Anim audition btn")->getValue().asBoolean() )  +		LLMotion* motion = gAgentAvatarp->findMotion(this->mItemID); +		if (motion)  		{ -			self->mPauseRequest = NULL; -			gAgentAvatarp->startMotion(item->getAssetUUID()); -			LLMotion* motion = gAgentAvatarp->findMotion(itemID); -			 -			if (motion) +			if (motion->isStopped() && this->mDidStart)  			{ -				motion->setDeactivateCallback(&endAnimCallback, (void *)(new LLHandle<LLFloater>(self->getHandle()))); +				cleanup(); +			} +			if(gAgentAvatarp->isMotionActive(this->mItemID) && !this->mDidStart) +			{ +				this->mDidStart = true;  			} -		} -		else -		{ -			gAgentAvatarp->stopMotion(itemID); -			gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_STOP);  		}  	}  }  // virtual +void LLPreviewAnim::cleanup() +{ +	this->mItemID = LLUUID::null; +	this->mDidStart = false; +	getChild<LLUICtrl>("Inworld")->setValue(FALSE); +	getChild<LLUICtrl>("Locally")->setValue(FALSE); +	getChild<LLUICtrl>("Inworld")->setEnabled(true); +	getChild<LLUICtrl>("Locally")->setEnabled(true); +} + +// virtual  void LLPreviewAnim::onClose(bool app_quitting)  {  	const LLInventoryItem *item = getItem(); @@ -176,12 +173,5 @@ void LLPreviewAnim::onClose(bool app_quitting)  	{  		gAgentAvatarp->stopMotion(item->getAssetUUID());  		gAgent.sendAnimationRequest(item->getAssetUUID(), ANIM_REQUEST_STOP); -		LLMotion* motion = gAgentAvatarp->findMotion(item->getAssetUUID()); -		 -		if (motion) -		{ -			// *TODO: minor memory leak here, user data is never deleted (Use real callbacks) -			motion->setDeactivateCallback(NULL, (void *)NULL); -		}  	}  } diff --git a/indra/newview/llpreviewanim.h b/indra/newview/llpreviewanim.h index 32e07ee33a..8eaed6ca1f 100644 --- a/indra/newview/llpreviewanim.h +++ b/indra/newview/llpreviewanim.h @@ -33,24 +33,18 @@  class LLPreviewAnim : public LLPreview  {  public: -	enum e_activation_type { NONE = 0, PLAY = 1, AUDITION = 2 }; -	LLPreviewAnim(const LLSD& key); -	static void playAnim( void* userdata ); -	static void auditionAnim( void* userdata ); -	static void endAnimCallback( void *userdata ); +	LLPreviewAnim(const LLSD& key);  	/*virtual*/	BOOL postBuild();  	/*virtual*/ void onClose(bool app_quitting); -	void activate(e_activation_type type); +	void draw(); +	void cleanup(); +	void play(const LLSD& param);  protected: -	LLAnimPauseRequest	mPauseRequest; -	LLUUID		mItemID; -	std::string	mTitle; -	LLUUID		mObjectID; -	LLButton*	mPlayBtn; -	LLButton*	mAuditionBtn; +	LLUUID	mItemID; +	bool	mDidStart;  }; -#endif  // LL_LLPREVIEWSOUND_H +#endif  // LL_LLPREVIEWANIM_H diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index de22f2ae6b..ddedb1dcfb 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -929,6 +929,13 @@ LLTextureCtrl::LLTextureCtrl(const LLTextureCtrl::Params& p)  	tentative_label_p.rect(LLRect (0, image_middle + line_height / 2, getRect().getWidth(), image_middle - line_height / 2 ));  	tentative_label_p.follows.flags(FOLLOWS_ALL);  	mTentativeLabel = LLUICtrlFactory::create<LLTextBox> (tentative_label_p); + +	// It is no longer possible to associate a style with a textbox, so it has to be done in this fashion +	LLStyle::Params style_params; +	style_params.color = LLColor4::white; + +	mTentativeLabel->setText(LLTrans::getString("multiple_textures"), style_params); +	mTentativeLabel->setHAlign(LLFontGL::HCENTER);  	addChild( mTentativeLabel );  	LLRect border_rect = getLocalRect(); diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp index 6bc7c6de11..ac01316462 100644 --- a/indra/newview/lltoolmgr.cpp +++ b/indra/newview/lltoolmgr.cpp @@ -81,7 +81,7 @@ LLToolMgr::LLToolMgr()  	// Not a panel, register these callbacks globally.  	LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.Active", boost::bind(&LLToolMgr::inEdit, this));  	LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.Enabled", boost::bind(&LLToolMgr::canEdit, this)); -	LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Build.Toggle", boost::bind(&LLToolMgr::toggleBuildMode, this)); +	LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Build.Toggle", boost::bind(&LLToolMgr::toggleBuildMode, this, _2));  	gToolNull = new LLTool(LLStringUtil::null);  // Does nothing  	setCurrentTool(gToolNull); @@ -245,8 +245,15 @@ bool LLToolMgr::canEdit()  	return LLViewerParcelMgr::getInstance()->allowAgentBuild();  } -void LLToolMgr::toggleBuildMode() +void LLToolMgr::toggleBuildMode(const LLSD& sdname)  { +	const std::string& param = sdname.asString(); + +	if (param == "build" && !canEdit()) +	{ +		return; +	} +  	LLFloaterReg::toggleInstanceOrBringToFront("build");  	bool build_visible = LLFloaterReg::instanceVisible("build"); diff --git a/indra/newview/lltoolmgr.h b/indra/newview/lltoolmgr.h index d489c4c829..12649cfba2 100644 --- a/indra/newview/lltoolmgr.h +++ b/indra/newview/lltoolmgr.h @@ -54,7 +54,7 @@ public:  	bool			inEdit();  	bool			canEdit(); -	void			toggleBuildMode(); +	void			toggleBuildMode(const LLSD& sdname);  	/* Determines if we are in Build mode or not. */  	bool			inBuildMode(); diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index cb40af7061..0adb187dd2 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -260,6 +260,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  	gPipeline.disableLights(); +	//reset vertex buffers if needed +	gPipeline.doResetVertexBuffers(); +  	stop_glerror();  	// Don't draw if the window is hidden or minimized. diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index bb870f7651..7fdaac68c8 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -35,7 +35,6 @@  #include "llcallfloater.h"  #include "llfasttimerview.h"  #include "llfloaterabout.h" -#include "llfloateranimpreview.h"  #include "llfloaterauction.h"  #include "llfloateravatar.h"  #include "llfloateravatarpicker.h" @@ -49,6 +48,7 @@  #include "llfloaterbuyland.h"  #include "llfloaterbulkpermission.h"  #include "llfloaterbump.h" +#include "llfloaterbvhpreview.h"  #include "llfloatercamera.h"  #include "llfloaterdeleteenvpreset.h"  #include "llfloaterdisplayname.h" @@ -294,7 +294,8 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterUIPreviewUtil::registerFloater(); -	LLFloaterReg::add("upload_anim", "floater_animation_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAnimPreview>, "upload"); +	LLFloaterReg::add("upload_anim_bvh", "floater_animation_bvh_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBvhPreview>, "upload"); +	LLFloaterReg::add("upload_anim_anim", "floater_animation_anim_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAnimPreview>, "upload");  	LLFloaterReg::add("upload_image", "floater_image_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterImagePreview>, "upload");  	LLFloaterReg::add("upload_model", "floater_model_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterModelPreview>, "upload");  	LLFloaterReg::add("upload_model_wizard", "floater_model_wizard.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterModelWizard>); diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp index 76f4e18c27..e052e37393 100644 --- a/indra/newview/llviewerjointmesh.cpp +++ b/indra/newview/llviewerjointmesh.cpp @@ -63,7 +63,6 @@ extern PFNGLWEIGHTFVARBPROC glWeightfvARB;  extern PFNGLVERTEXBLENDARBPROC glVertexBlendARB;  #endif -static LLPointer<LLVertexBuffer> sRenderBuffer = NULL;  static const U32 sRenderMask = LLVertexBuffer::MAP_VERTEX |  							   LLVertexBuffer::MAP_NORMAL |  							   LLVertexBuffer::MAP_TEXCOORD0; diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 7e830e14bf..95e3bc9b89 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -183,7 +183,7 @@ void LLFilePickerThread::clearDead()  #if LL_WINDOWS  static std::string SOUND_EXTENSIONS = "wav";  static std::string IMAGE_EXTENSIONS = "tga bmp jpg jpeg png"; -static std::string ANIM_EXTENSIONS =  "bvh"; +static std::string ANIM_EXTENSIONS =  "bvh anim";  #ifdef _CORY_TESTING  static std::string GEOMETRY_EXTENSIONS = "slg";  #endif @@ -385,7 +385,14 @@ class LLFileUploadAnim : public view_listener_t  		const std::string filename = upload_pick((void*)LLFilePicker::FFLOAD_ANIM);  		if (!filename.empty())  		{ -			LLFloaterReg::showInstance("upload_anim", LLSD(filename)); +			if (filename.rfind(".anim") != std::string::npos) +			{ +				LLFloaterReg::showInstance("upload_anim_anim", LLSD(filename)); +			} +			else +			{ +				LLFloaterReg::showInstance("upload_anim_bvh", LLSD(filename)); +			}  		}  		return true;  	} @@ -785,6 +792,11 @@ LLUUID upload_new_resource(  		upload_error(error_message, "DoNotSupportBulkAnimationUpload", filename, args);  		return LLUUID();  	} +	else if (exten == "anim") +	{ +		asset_type = LLAssetType::AT_ANIMATION; +		filename = src_filename; +	}  	else  	{  		// Unknown extension diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 3c6770df43..2a584d6ed7 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5816,6 +5816,16 @@ bool script_question_cb(const LLSD& notification, const LLSD& response)  	S32 orig = notification["payload"]["questions"].asInteger();  	S32 new_questions = orig; +	if (response["Details"]) +	{ +		// respawn notification... +		LLNotificationsUtil::add(notification["name"], notification["substitutions"], notification["payload"]); + +		// ...with description on top +		LLNotificationsUtil::add("DebitPermissionDetails"); +		return false; +	} +  	// check whether permissions were granted or denied  	BOOL allowed = TRUE;  	// the "yes/accept" button is the first button in the template, making it button 0 @@ -5873,14 +5883,6 @@ bool script_question_cb(const LLSD& notification, const LLSD& response)  				gSavedSettings.getString("NotificationChannelUUID")), OfferMatcher(item_id));  	} -	if (response["Details"]) -	{ -		// respawn notification... -		LLNotificationsUtil::add(notification["name"], notification["substitutions"], notification["payload"]); - -		// ...with description on top -		LLNotificationsUtil::add("DebitPermissionDetails"); -	}  	return false;  }  static LLNotificationFunctorRegistration script_question_cb_reg_1("ScriptQuestion", script_question_cb); diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 5de363e03c..6db2138688 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -730,7 +730,7 @@ BOOL LLViewerShaderMgr::loadBasicShaders()  	vector< pair<string, S32> > shaders;  	shaders.push_back( make_pair( "windlight/atmosphericsVarsV.glsl",		mVertexShaderLevel[SHADER_WINDLIGHT] ) ); -	shaders.push_back( make_pair( "windlight/atmosphericsVarsWaterV.glsl",		mVertexShaderLevel[SHADER_WINDLIGHT] ) ); +	shaders.push_back( make_pair( "windlight/atmosphericsVarsWaterV.glsl",	mVertexShaderLevel[SHADER_WINDLIGHT] ) );  	shaders.push_back( make_pair( "windlight/atmosphericsHelpersV.glsl",	mVertexShaderLevel[SHADER_WINDLIGHT] ) );  	shaders.push_back( make_pair( "lighting/lightFuncV.glsl",				mVertexShaderLevel[SHADER_LIGHTING] ) );  	shaders.push_back( make_pair( "lighting/sumLightsV.glsl",				sum_lights_class ) ); @@ -1102,19 +1102,25 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	if (success)  	{  		gDeferredSkinnedAlphaProgram.mName = "Deferred Skinned Alpha Shader"; +		gDeferredSkinnedAlphaProgram.mFeatures.atmosphericHelpers = true;  		gDeferredSkinnedAlphaProgram.mFeatures.hasObjectSkinning = true;  		gDeferredSkinnedAlphaProgram.mFeatures.calculatesAtmospherics = true;  		gDeferredSkinnedAlphaProgram.mFeatures.hasGamma = true;  		gDeferredSkinnedAlphaProgram.mFeatures.hasAtmospherics = true; -		gDeferredSkinnedAlphaProgram.mFeatures.calculatesLighting = true; -		gDeferredSkinnedAlphaProgram.mFeatures.hasLighting = true; +		gDeferredSkinnedAlphaProgram.mFeatures.calculatesLighting = false; +		gDeferredSkinnedAlphaProgram.mFeatures.hasLighting = false;  		gDeferredSkinnedAlphaProgram.mFeatures.isAlphaLighting = true;  		gDeferredSkinnedAlphaProgram.mFeatures.disableTextureIndex = true;  		gDeferredSkinnedAlphaProgram.mShaderFiles.clear();  		gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaSkinnedV.glsl", GL_VERTEX_SHADER_ARB));  		gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaNonIndexedF.glsl", GL_FRAGMENT_SHADER_ARB));  		gDeferredSkinnedAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; +		  		success = gDeferredSkinnedAlphaProgram.createShader(NULL, NULL); +		 +		// Hack to include uniforms for lighting without linking in lighting file +		gDeferredSkinnedAlphaProgram.mFeatures.calculatesLighting = true; +		gDeferredSkinnedAlphaProgram.mFeatures.hasLighting = true;  	}  	if (success) @@ -1231,11 +1237,12 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	if (success)  	{  		gDeferredAlphaProgram.mName = "Deferred Alpha Shader"; -		gDeferredAlphaProgram.mFeatures.calculatesLighting = true; +		gDeferredAlphaProgram.mFeatures.atmosphericHelpers = true; +		gDeferredAlphaProgram.mFeatures.calculatesLighting = false;  		gDeferredAlphaProgram.mFeatures.calculatesAtmospherics = true;  		gDeferredAlphaProgram.mFeatures.hasGamma = true;  		gDeferredAlphaProgram.mFeatures.hasAtmospherics = true; -		gDeferredAlphaProgram.mFeatures.hasLighting = true; +		gDeferredAlphaProgram.mFeatures.hasLighting = false;  		gDeferredAlphaProgram.mFeatures.isAlphaLighting = true;  		gDeferredAlphaProgram.mFeatures.disableTextureIndex = true; //hack to disable auto-setup of texture channels  		if (mVertexShaderLevel[SHADER_DEFERRED] < 1) @@ -1251,7 +1258,12 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaV.glsl", GL_VERTEX_SHADER_ARB));  		gDeferredAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB));  		gDeferredAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; +  		success = gDeferredAlphaProgram.createShader(NULL, NULL); + +		// Hack +		gDeferredAlphaProgram.mFeatures.calculatesLighting = true; +		gDeferredAlphaProgram.mFeatures.hasLighting = true;  	}  	if (success) @@ -1394,19 +1406,24 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	if (success)  	{  		gDeferredAvatarAlphaProgram.mName = "Avatar Alpha Shader"; +		gDeferredAvatarAlphaProgram.mFeatures.atmosphericHelpers = true;  		gDeferredAvatarAlphaProgram.mFeatures.hasSkinning = true; -		gDeferredAvatarAlphaProgram.mFeatures.calculatesLighting = true; +		gDeferredAvatarAlphaProgram.mFeatures.calculatesLighting = false;  		gDeferredAvatarAlphaProgram.mFeatures.calculatesAtmospherics = true;  		gDeferredAvatarAlphaProgram.mFeatures.hasGamma = true;  		gDeferredAvatarAlphaProgram.mFeatures.hasAtmospherics = true; -		gDeferredAvatarAlphaProgram.mFeatures.hasLighting = true; +		gDeferredAvatarAlphaProgram.mFeatures.hasLighting = false;  		gDeferredAvatarAlphaProgram.mFeatures.isAlphaLighting = true;  		gDeferredAvatarAlphaProgram.mFeatures.disableTextureIndex = true;  		gDeferredAvatarAlphaProgram.mShaderFiles.clear();  		gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/avatarAlphaV.glsl", GL_VERTEX_SHADER_ARB));  		gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaNonIndexedNoColorF.glsl", GL_FRAGMENT_SHADER_ARB));  		gDeferredAvatarAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; +  		success = gDeferredAvatarAlphaProgram.createShader(NULL, &mAvatarUniforms); + +		gDeferredAvatarAlphaProgram.mFeatures.calculatesLighting = true; +		gDeferredAvatarAlphaProgram.mFeatures.hasLighting = true;  	}  	if (success) diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 8a713ae22c..e0653fec30 100644..100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2021,6 +2021,12 @@ void LLViewerWindow::shutdownGL()  	gSky.cleanup();  	stop_glerror(); +	llinfos << "Cleaning up pipeline" << llendl; +	gPipeline.cleanup(); +	stop_glerror(); + +	//MUST clean up pipeline before cleaning up wearables +	llinfos << "Cleaning up wearables" << llendl;  	LLWearableList::instance().cleanup() ;  	gTextureList.shutdown(); @@ -2031,10 +2037,6 @@ void LLViewerWindow::shutdownGL()  	LLWorldMapView::cleanupTextures(); -	llinfos << "Cleaning up pipeline" << llendl; -	gPipeline.cleanup(); -	stop_glerror(); -  	LLViewerTextureManager::cleanup() ;  	LLImageGL::cleanupClass() ; diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index f1df67494f..e525d6bad0 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -66,10 +66,11 @@  #include <boost/lexical_cast.hpp> -LLVOAvatarSelf *gAgentAvatarp = NULL; +LLPointer<LLVOAvatarSelf> gAgentAvatarp = NULL; +  BOOL isAgentAvatarValid()  { -	return (gAgentAvatarp && +	return (gAgentAvatarp.notNull() &&  			(gAgentAvatarp->getRegion() != NULL) &&  			(!gAgentAvatarp->isDead()));  } diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 54dbe81993..655fb3a012 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -383,7 +383,7 @@ private:  }; -extern LLVOAvatarSelf *gAgentAvatarp; +extern LLPointer<LLVOAvatarSelf> gAgentAvatarp;  BOOL isAgentAvatarValid(); diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index e9db37821b..312034022e 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -342,7 +342,7 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)  	blue_density = LLColor3();  	blue_horizon = LLColor3();  	haze_density = 0.f; -	haze_horizon = LLColor3(); +	haze_horizon = 1.f;  	density_multiplier = 0.f;  	max_y = 0.f;  	glow = LLColor3(); @@ -651,17 +651,17 @@ void LLVOSky::initAtmospherics(void)  	sunlight_color = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("sunlight_color", error));  	ambient = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("ambient", error));  	//lightnorm = LLWLParamManager::getInstance()->mCurParams.getVector("lightnorm", error); -	gamma = LLWLParamManager::getInstance()->mCurParams.getVector("gamma", error)[0]; +	gamma = LLWLParamManager::getInstance()->mCurParams.getFloat("gamma", error);  	blue_density = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("blue_density", error));  	blue_horizon = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("blue_horizon", error)); -	haze_density = LLWLParamManager::getInstance()->mCurParams.getVector("haze_density", error)[0]; -	haze_horizon = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("haze_horizon", error)); -	density_multiplier = LLWLParamManager::getInstance()->mCurParams.getVector("density_multiplier", error)[0]; -	max_y = LLWLParamManager::getInstance()->mCurParams.getVector("max_y", error)[0]; +	haze_density = LLWLParamManager::getInstance()->mCurParams.getFloat("haze_density", error); +	haze_horizon = LLWLParamManager::getInstance()->mCurParams.getFloat("haze_horizon", error); +	density_multiplier = LLWLParamManager::getInstance()->mCurParams.getFloat("density_multiplier", error); +	max_y = LLWLParamManager::getInstance()->mCurParams.getFloat("max_y", error);  	glow = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("glow", error)); -	cloud_shadow = LLWLParamManager::getInstance()->mCurParams.getVector("cloud_shadow", error)[0]; +	cloud_shadow = LLWLParamManager::getInstance()->mCurParams.getFloat("cloud_shadow", error);  	cloud_color = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("cloud_color", error)); -	cloud_scale = LLWLParamManager::getInstance()->mCurParams.getVector("cloud_scale", error)[0]; +	cloud_scale = LLWLParamManager::getInstance()->mCurParams.getFloat("cloud_scale", error);  	cloud_pos_density1 = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("cloud_pos_density1", error));  	cloud_pos_density2 = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("cloud_pos_density2", error)); @@ -825,7 +825,7 @@ void LLVOSky::calcSkyColorWLVert(LLVector3 & Pn, LLColor3 & vary_HazeColor, LLCo  	// Haze color above cloud  	vary_HazeColor = (blue_horizon * blue_weight * (sunlight + ambient) -				+ componentMult(haze_horizon.mV[0] * haze_weight, sunlight * temp2.mV[0] + ambient) +				+ componentMult(haze_horizon * haze_weight, sunlight * temp2.mV[0] + ambient)  			 );	  	// Increase ambient when there are more clouds @@ -836,7 +836,7 @@ void LLVOSky::calcSkyColorWLVert(LLVector3 & Pn, LLColor3 & vary_HazeColor, LLCo  	// Haze color below cloud  	LLColor3 additiveColorBelowCloud = (blue_horizon * blue_weight * (sunlight + tmpAmbient) -				+ componentMult(haze_horizon.mV[0] * haze_weight, sunlight * temp2.mV[0] + tmpAmbient) +				+ componentMult(haze_horizon * haze_weight, sunlight * temp2.mV[0] + tmpAmbient)  			 );	  	// Final atmosphere additive @@ -1002,7 +1002,7 @@ void LLVOSky::calcAtmospherics(void)  		//haze color  		vary_HazeColor =  			(blue_horizon * blue_weight * (sunlight*(1.f - cloud_shadow) + tmpAmbient)	 -			+ componentMult(haze_horizon.mV[0] * haze_weight, sunlight*(1.f - cloud_shadow) * temp2.mV[0] + tmpAmbient) +			+ componentMult(haze_horizon * haze_weight, sunlight*(1.f - cloud_shadow) * temp2.mV[0] + tmpAmbient)  				 );	  		//brightness of surface both sunlight and ambient diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h index d3a42583ea..6e6898d80a 100644 --- a/indra/newview/llvosky.h +++ b/indra/newview/llvosky.h @@ -410,7 +410,7 @@ public:  	LLColor3 blue_density;  	LLColor3 blue_horizon;  	F32 haze_density; -	LLColor3 haze_horizon; +	F32 haze_horizon;  	F32 density_multiplier;  	F32 max_y;  	LLColor3 glow; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 7492a06784..438d578ac5 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -4433,10 +4433,10 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  					else  					{  						if (te->getColor().mV[3] > 0.f) -						{ +						{ //only treat as alpha in the pipeline if < 100% transparent  							drawablep->setState(LLDrawable::HAS_ALPHA); -							alpha_faces.push_back(facep);  						} +						alpha_faces.push_back(facep);  					}  				}  				else @@ -4939,6 +4939,11 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  				fullbright = TRUE;  			} +			if (hud_group) +			{ //all hud attachments are fullbright +				fullbright = TRUE; +			} +  			const LLTextureEntry* te = facep->getTextureEntry();  			tex = facep->getTexture(); @@ -4947,7 +4952,11 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  			if (is_alpha)  			{  				// can we safely treat this as an alpha mask? -				if (facep->canRenderAsMask()) +				if (facep->getFaceColor().mV[3] <= 0.f) +				{ //100% transparent, don't render unless we're highlighting transparent +					registerFace(group, facep, LLRenderPass::PASS_ALPHA_INVISIBLE); +				} +				else if (facep->canRenderAsMask())  				{  					if (te->getFullbright() || LLPipeline::sNoAlpha)  					{ @@ -4964,7 +4973,6 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  				}  			}  			else if (gPipeline.canUseVertexShaders() -				&& group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_HUD   				&& LLPipeline::sRenderBump   				&& te->getShiny())  			{ //shiny @@ -5029,9 +5037,12 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  					}  				} -				//not sure why this is here -- shiny HUD attachments maybe?  -- davep 5/11/2010 -				if (!is_alpha && te->getShiny() && LLPipeline::sRenderBump) -				{ +				 +				if (!gPipeline.canUseVertexShaders() &&  +					!is_alpha &&  +					te->getShiny() &&  +					LLPipeline::sRenderBump) +				{ //shiny as an extra pass when shaders are disabled  					registerFace(group, facep, LLRenderPass::PASS_SHINY);  				}  			} diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp index 20b34637b8..e386112334 100644 --- a/indra/newview/llwaterparammanager.cpp +++ b/indra/newview/llwaterparammanager.cpp @@ -194,7 +194,7 @@ void LLWaterParamManager::updateShaderUniforms(LLGLSLShader * shader)  		shader->uniform4fv("waterPlane", 1, mWaterPlane.mV);  		shader->uniform1f("waterFogDensity", getFogDensity());  		shader->uniform1f("waterFogKS", mWaterFogKS); -		shader->uniform4f("distance_multiplier", 0, 0, 0, 0); +		shader->uniform1f("distance_multiplier", 0);  	}  } diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index d8aa0b7d5c..0f7f63061b 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -221,7 +221,7 @@ void LLWearable::createVisualParams()  		param->resetDrivenParams();  		if(!param->linkDrivenParams(boost::bind(wearable_function,(LLWearable*)this, _1), false))  		{ -			if( !param->linkDrivenParams(boost::bind(avatar_function,gAgentAvatarp,_1 ), true)) +			if( !param->linkDrivenParams(boost::bind(avatar_function,gAgentAvatarp.get(),_1 ), true))  			{  				llwarns << "could not link driven params for wearable " << getName() << " id: " << param->getID() << llendl;  				continue; diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp index 55608a059f..49d9d44d74 100644 --- a/indra/newview/llwlparammanager.cpp +++ b/indra/newview/llwlparammanager.cpp @@ -64,7 +64,6 @@  LLWLParamManager::LLWLParamManager() :  	//set the defaults for the controls -	// index is from sWLUniforms in pipeline.cpp line 979  	/// Sun Delta Terrain tweak variables.  	mSunDeltaYaw(180.0f), @@ -72,10 +71,10 @@ LLWLParamManager::LLWLParamManager() :  	mWLGamma(1.0f, "gamma"),  	mBlueHorizon(0.25f, 0.25f, 1.0f, 1.0f, "blue_horizon", "WLBlueHorizon"), -	mHazeDensity(1.0f, 1.0f, 1.0f, 0.5f, "haze_density"), +	mHazeDensity(1.0f, "haze_density"),  	mBlueDensity(0.25f, 0.25f, 0.25f, 1.0f, "blue_density", "WLBlueDensity"),  	mDensityMult(1.0f, "density_multiplier", 1000), -	mHazeHorizon(1.0f, 1.0f, 1.0f, 0.5f, "haze_horizon"), +	mHazeHorizon(1.0f, "haze_horizon"),  	mMaxAlt(4000.0f, "max_y"),  	// Lighting diff --git a/indra/newview/llwlparammanager.h b/indra/newview/llwlparammanager.h index bc984b9126..72422500fc 100644 --- a/indra/newview/llwlparammanager.h +++ b/indra/newview/llwlparammanager.h @@ -102,9 +102,8 @@ struct WLFloatControl {  	{  	} -	inline WLFloatControl & operator = (LLVector4 const & val) { -		x = val.mV[0]; - +	inline WLFloatControl & operator = (F32 val) { +		x = val;  		return *this;  	} @@ -340,10 +339,10 @@ public:  	/// Atmospherics  	WLColorControl mBlueHorizon; -	WLColorControl mHazeDensity; +	WLFloatControl mHazeDensity;  	WLColorControl mBlueDensity;  	WLFloatControl mDensityMult; -	WLColorControl mHazeHorizon; +	WLFloatControl mHazeHorizon;  	WLFloatControl mMaxAlt;  	/// Lighting diff --git a/indra/newview/llwlparamset.cpp b/indra/newview/llwlparamset.cpp index 5bb7025031..b04d30db55 100644 --- a/indra/newview/llwlparamset.cpp +++ b/indra/newview/llwlparamset.cpp @@ -41,33 +41,7 @@  LLWLParamSet::LLWLParamSet(void) :  	mName("Unnamed Preset"),  	mCloudScrollXOffset(0.f), mCloudScrollYOffset(0.f)	 -{ -/* REMOVE or init the LLSD -	const std::map<std::string, LLVector4>::value_type hardcodedPreset[] = { -		std::make_pair("lightnorm",				LLVector4(0.f, 0.707f, -0.707f, 0.f)), -		std::make_pair("sunlight_color",		LLVector4(0.6f, 0.6f, 2.83f, 2.27f)), -		std::make_pair("ambient",				LLVector4(0.27f, 0.33f, 0.44f, 1.19f)), -		std::make_pair("blue_horizon",			LLVector4(0.3f, 0.4f, 0.9f, 1.f)), -		std::make_pair("blue_density",			LLVector4(0.3f, 0.4f, 0.8f, 1.f)), -		std::make_pair("haze_horizon",			LLVector4(0.6f, 0.6f, 0.6f, 1.f)), -		std::make_pair("haze_density",			LLVector4(0.3f, 0.3f, 0.3f, 1.f)), -		std::make_pair("cloud_shadow",			LLVector4(0.f, 0.f, 0.f, 0.f)), -		std::make_pair("density_multiplier",	LLVector4(0.001f, 0.001f, 0.001f, 0.001f)), -		std::make_pair("distance_multiplier",	LLVector4(1.f, 1.f, 1.f, 1.f)), -		std::make_pair("max_y",					LLVector4(600.f, 600.f, 600.f, 0.f)), -		std::make_pair("glow",					LLVector4(15.f, 0.001f, -0.03125f, 0.f)), -		std::make_pair("cloud_color",			LLVector4(0.0f, 0.0f, 0.0f, 0.0f)), -		std::make_pair("cloud_pos_density1",	LLVector4(0.f, 0.f, 0.f, 1.f)), -		std::make_pair("cloud_pos_density2",	LLVector4(0.f, 0.f, 0.f, 1.f)), -		std::make_pair("cloud_scale",			LLVector4(0.42f, 0.f, 0.f, 1.f)), -		std::make_pair("gamma",					LLVector4(2.0f, 2.0f, 2.0f, 0.0f)), -	}; -	std::map<std::string, LLVector4>::value_type const * endHardcodedPreset =  -		hardcodedPreset + LL_ARRAY_SIZE(hardcodedPreset); - -	mParamValues.insert(hardcodedPreset, endHardcodedPreset); -*/ -} +{}  static LLFastTimer::DeclareTimer FTM_WL_PARAM_UPDATE("WL Param Update"); @@ -79,55 +53,78 @@ void LLWLParamSet::update(LLGLSLShader * shader) const  		i != mParamValues.endMap();  		++i)  	{ -		 -  		const std::string& param = i->first; -		if(	param == "star_brightness" || param == "preset_num" || param == "sun_angle" || +		if (param == "star_brightness" || param == "preset_num" || param == "sun_angle" ||  			param == "east_angle" || param == "enable_cloud_scroll" ||  			param == "cloud_scroll_rate" || param == "lightnorm" )   		{  			continue;  		} -		if(param == "cloud_pos_density1")  +		if (param == "cloud_pos_density1")  		{  			LLVector4 val;  			val.mV[0] = F32(i->second[0].asReal()) + mCloudScrollXOffset;  			val.mV[1] = F32(i->second[1].asReal()) + mCloudScrollYOffset;  			val.mV[2] = (F32) i->second[2].asReal();  			val.mV[3] = (F32) i->second[3].asReal(); +  			stop_glerror();  			shader->uniform4fv(param, 1, val.mV);  			stop_glerror(); -		}  +		} +		else if (param == "cloud_scale" || param == "cloud_shadow" || +				 param == "density_multiplier" || param == "distance_multiplier" || +				 param == "haze_density" || param == "haze_horizon" || +				 param == "max_y" ) +		{ +			F32 val = (F32) i->second[0].asReal(); + +			stop_glerror(); +			shader->uniform1f(param, val); +			stop_glerror(); +		}  		else // param is the uniform name  		{ -			LLVector4 val; -			  			// handle all the different cases -			if(i->second.isArray() && i->second.size() == 4)  +			if (i->second.isArray() && i->second.size() == 4)  			{ +				LLVector4 val; +  				val.mV[0] = (F32) i->second[0].asReal();  				val.mV[1] = (F32) i->second[1].asReal();  				val.mV[2] = (F32) i->second[2].asReal();  				val.mV[3] = (F32) i->second[3].asReal();															 + +				stop_glerror(); +				shader->uniform4fv(param, 1, val.mV); +				stop_glerror();  			}  -			else if(i->second.isReal())  +			else if (i->second.isReal())  			{ -				val.mV[0] = (F32) i->second.asReal(); +				F32 val = (F32) i->second.asReal(); + +				stop_glerror(); +				shader->uniform1f(param, val); +				stop_glerror();  			}  -			else if(i->second.isInteger())  +			else if (i->second.isInteger())  			{ -				val.mV[0] = (F32) i->second.asReal(); +				S32 val = (S32) i->second.asInteger(); + +				stop_glerror(); +				shader->uniform1i(param, val); +				stop_glerror();  			}  -			else if(i->second.isBoolean()) +			else if (i->second.isBoolean())  			{ -				val.mV[0] = i->second.asBoolean(); +				S32 val = (i->second.asBoolean() ? 1 : 0); + +				stop_glerror(); +				shader->uniform1i(param, val); +				stop_glerror();  			} -			stop_glerror(); -			shader->uniform4fv(param, 1, val.mV); -			stop_glerror();  		}  	}  } @@ -148,7 +145,8 @@ void LLWLParamSet::set(const std::string& paramName, float x)  	}  } -void LLWLParamSet::set(const std::string& paramName, float x, float y) { +void LLWLParamSet::set(const std::string& paramName, float x, float y) +{  	mParamValues[paramName][0] = x;  	mParamValues[paramName][1] = y;  } @@ -194,7 +192,6 @@ void LLWLParamSet::set(const std::string& paramName, const LLColor4 & val)  LLVector4 LLWLParamSet::getVector(const std::string& paramName, bool& error)   { -	  	// test to see if right type  	LLSD cur_val = mParamValues.get(paramName);  	if (!cur_val.isArray())  @@ -215,7 +212,6 @@ LLVector4 LLWLParamSet::getVector(const std::string& paramName, bool& error)  F32 LLWLParamSet::getFloat(const std::string& paramName, bool& error)   { -	  	// test to see if right type  	LLSD cur_val = mParamValues.get(paramName);  	if (cur_val.isArray() && cur_val.size() != 0)  @@ -234,8 +230,6 @@ F32 LLWLParamSet::getFloat(const std::string& paramName, bool& error)  	return 0;  } - -  void LLWLParamSet::setSunAngle(float val)   {  	// keep range 0 - 2pi @@ -263,7 +257,6 @@ void LLWLParamSet::setEastAngle(float val)  	mParamValues["east_angle"] = val;  } -  void LLWLParamSet::mix(LLWLParamSet& src, LLWLParamSet& dest, F32 weight)  {  	// set up the iterators @@ -282,7 +275,6 @@ void LLWLParamSet::mix(LLWLParamSet& src, LLWLParamSet& dest, F32 weight)  	// Iterate through values  	for(LLSD::map_iterator iter = mParamValues.beginMap(); iter != mParamValues.endMap(); ++iter)  	{ -  		// If param exists in both src and dest, set the holder variables, otherwise skip  		if(src.mParamValues.has(iter->first) && dest.mParamValues.has(iter->first))  		{ diff --git a/indra/newview/llwlparamset.h b/indra/newview/llwlparamset.h index 3c44ed3bb8..b087119dd5 100644 --- a/indra/newview/llwlparamset.h +++ b/indra/newview/llwlparamset.h @@ -110,7 +110,7 @@ public:  	/// \param error		A flag to set if it's not the proper return type  	LLVector4 getVector(const std::string& paramName, bool& error); -	/// Get an integer parameter +	/// Get a float parameter  	/// \param paramName	The name of the parameter to set.  	/// \param error		A flag to set if it's not the proper return type	  	F32 getFloat(const std::string& paramName, bool& error); diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index 676287c0ad..fbd8b3ada3 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -1161,24 +1161,13 @@ void send_agent_resume()  static LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3d& region_origin)  { -	LLVector3d pos_global; -	LLVector3 pos_local; -	U8 bits; +	LLVector3d pos_local; -	bits = compact_local & 0xFF; -	pos_local.mV[VZ] = F32(bits) * 4.f; -	compact_local >>= 8; +	pos_local.mdV[VZ] = (compact_local & 0xFFU) * 4; +	pos_local.mdV[VY] = (compact_local >> 8) & 0xFFU; +	pos_local.mdV[VX] = (compact_local >> 16) & 0xFFU; -	bits = compact_local & 0xFF; -	pos_local.mV[VY] = (F32)bits; -	compact_local >>= 8; - -	bits = compact_local & 0xFF; -	pos_local.mV[VX] = (F32)bits; - -	pos_global.setVec( pos_local ); -	pos_global += region_origin; -	return pos_global; +	return region_origin + pos_local;  }  void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positions, const LLVector3d& relative_to, F32 radius) const @@ -1199,23 +1188,20 @@ void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positi  		iter != LLCharacter::sInstances.end(); ++iter)  	{  		LLVOAvatar* pVOAvatar = (LLVOAvatar*) *iter; -		if(!pVOAvatar->isDead() && !pVOAvatar->isSelf()) +		LLVector3d pos_global = pVOAvatar->getPositionGlobal(); +		LLUUID uuid = pVOAvatar->getID(); +		if( !pVOAvatar->isDead() +			&& !pVOAvatar->isSelf() +			&& !uuid.isNull() && +			dist_vec_squared(pos_global, relative_to) <= radius_squared)  		{ -			LLUUID uuid = pVOAvatar->getID(); -			if(!uuid.isNull()) +			if(positions != NULL)  			{ -				LLVector3d pos_global = pVOAvatar->getPositionGlobal(); -				if(dist_vec_squared(pos_global, relative_to) <= radius_squared) -				{ -					if(positions != NULL) -					{ -						positions->push_back(pos_global); -					} -					if(avatar_ids !=NULL) -					{ -						avatar_ids->push_back(uuid); -					} -				} +				positions->push_back(pos_global); +			} +			if(avatar_ids !=NULL) +			{ +				avatar_ids->push_back(uuid);  			}  		}  	} @@ -1233,9 +1219,9 @@ void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positi  			{  				LLUUID uuid = regionp->mMapAvatarIDs.get(i);  				// if this avatar doesn't already exist in the list, add it -				if(uuid.notNull() && avatar_ids!=NULL && std::find(avatar_ids->begin(), avatar_ids->end(), uuid) == avatar_ids->end()) +				if(uuid.notNull() && avatar_ids != NULL && std::find(avatar_ids->begin(), avatar_ids->end(), uuid) == avatar_ids->end())  				{ -					if(positions != NULL) +					if (positions != NULL)  					{  						positions->push_back(pos_global);  					} diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index e50851b8e7..fc3ab1a0c0 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -77,6 +77,7 @@ LLUIImagePtr LLWorldMapView::sAvatarYouLargeImage = NULL;  LLUIImagePtr LLWorldMapView::sAvatarLevelImage = NULL;  LLUIImagePtr LLWorldMapView::sAvatarAboveImage = NULL;  LLUIImagePtr LLWorldMapView::sAvatarBelowImage = NULL; +LLUIImagePtr LLWorldMapView::sAvatarUnknownImage = NULL;  LLUIImagePtr LLWorldMapView::sTelehubImage = NULL;  LLUIImagePtr LLWorldMapView::sInfohubImage = NULL; @@ -120,6 +121,7 @@ void LLWorldMapView::initClass()  	sAvatarLevelImage =		LLUI::getUIImage("map_avatar_32.tga");  	sAvatarAboveImage =		LLUI::getUIImage("map_avatar_above_32.tga");  	sAvatarBelowImage =		LLUI::getUIImage("map_avatar_below_32.tga"); +	sAvatarUnknownImage =	LLUI::getUIImage("map_avatar_unknown_32.tga");  	sHomeImage =			LLUI::getUIImage("map_home.tga");  	sTelehubImage = 		LLUI::getUIImage("map_telehub.tga"); @@ -149,6 +151,7 @@ void LLWorldMapView::cleanupClass()  	sAvatarLevelImage = NULL;  	sAvatarAboveImage = NULL;  	sAvatarBelowImage = NULL; +	sAvatarUnknownImage = NULL;  	sTelehubImage = NULL;  	sInfohubImage = NULL; @@ -1147,17 +1150,25 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,  								F32 y_pixels,  								const LLColor4& color,  								F32 relative_z, -								F32 dot_radius) +								F32 dot_radius, +								bool unknown_relative_z)  {  	const F32 HEIGHT_THRESHOLD = 7.f;  	LLUIImagePtr dot_image = sAvatarLevelImage; -	if(relative_z < -HEIGHT_THRESHOLD)  +	if (unknown_relative_z)  	{ -		dot_image = sAvatarBelowImage;  +		dot_image = sAvatarUnknownImage;  	} -	else if(relative_z > HEIGHT_THRESHOLD)  -	{  -		dot_image = sAvatarAboveImage; +	else +	{ +		if(relative_z < -HEIGHT_THRESHOLD) +		{ +			dot_image = sAvatarBelowImage;  +		} +		else if(relative_z > HEIGHT_THRESHOLD)  +		{  +			dot_image = sAvatarAboveImage; +		}  	}  	S32 dot_width = llround(dot_radius * 2.f);  	dot_image->draw(llround(x_pixels - dot_radius), diff --git a/indra/newview/llworldmapview.h b/indra/newview/llworldmapview.h index 9ab53b1ba3..a2a6dc53fb 100644 --- a/indra/newview/llworldmapview.h +++ b/indra/newview/llworldmapview.h @@ -112,7 +112,8 @@ public:  								F32 y_pixels,   								const LLColor4& color,  								F32 relative_z = 0.f, -								F32 dot_radius = 3.f); +								F32 dot_radius = 3.f, +								bool reached_max_z = false);  	static void		drawIconName(F32 x_pixels,   									F32 y_pixels,   									const LLColor4& color, @@ -138,6 +139,7 @@ public:  	static LLUIImagePtr	sAvatarLevelImage;  	static LLUIImagePtr	sAvatarAboveImage;  	static LLUIImagePtr	sAvatarBelowImage; +	static LLUIImagePtr	sAvatarUnknownImage;  	static LLUIImagePtr	sTelehubImage;  	static LLUIImagePtr	sInfohubImage; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index c523a78b22..a64655960f 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -203,10 +203,6 @@ extern S32 gBoxFrame;  extern BOOL gDisplaySwapBuffers;  extern BOOL gDebugGL; -// hack counter for rendering a fixed number of frames after toggling -// fullscreen to work around DEV-5361 -static S32 sDelayedVBOEnable = 0; -  BOOL	gAvatarBacklight = FALSE;  BOOL	gDebugPipeline = FALSE; @@ -411,6 +407,7 @@ LLPipeline::LLPipeline() :  	mOldRenderDebugMask(0),  	mGroupQ1Locked(false),  	mGroupQ2Locked(false), +	mResetVertexBuffers(false),  	mLastRebuildPool(NULL),  	mAlphaPool(NULL),  	mSkyPool(NULL), @@ -692,8 +689,6 @@ void LLPipeline::destroyGL()  	if (LLVertexBuffer::sEnableVBOs)  	{ -		// render 30 frames after switching to work around DEV-5361 -		sDelayedVBOEnable = 30;  		LLVertexBuffer::sEnableVBOs = FALSE;  	}  } @@ -2523,15 +2518,6 @@ void LLPipeline::updateGeom(F32 max_dtime)  	assertInitialized(); -	if (sDelayedVBOEnable > 0) -	{ -		if (--sDelayedVBOEnable <= 0) -		{ -			resetVertexBuffers(); -			LLVertexBuffer::sEnableVBOs = TRUE; -		} -	} -  	// notify various object types to reset internal cost metrics, etc.  	// for now, only LLVOVolume does this to throttle LOD changes  	LLVOVolume::preUpdateGeom(); @@ -6185,7 +6171,7 @@ LLSpatialPartition* LLPipeline::getSpatialPartition(LLViewerObject* vobj)  void LLPipeline::resetVertexBuffers(LLDrawable* drawable)  { -	if (!drawable || drawable->isDead()) +	if (!drawable)  	{  		return;  	} @@ -6198,7 +6184,19 @@ void LLPipeline::resetVertexBuffers(LLDrawable* drawable)  }  void LLPipeline::resetVertexBuffers() -{	 +{ +	mResetVertexBuffers = true; +} + +void LLPipeline::doResetVertexBuffers() +{ +	if (!mResetVertexBuffers) +	{ +		return; +	} +	 +	mResetVertexBuffers = false; +  	for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();   			iter != LLWorld::getInstance()->getRegionList().end(); ++iter)  	{ @@ -6224,11 +6222,9 @@ void LLPipeline::resetVertexBuffers()  	if (LLVertexBuffer::sGLCount > 0)  	{ -		llwarns << "VBO wipe failed." << llendl; +		llwarns << "VBO wipe failed -- " << LLVertexBuffer::sGLCount << " buffers remaining." << llendl;  	} -	llassert(LLVertexBuffer::sGLCount == 0); -  	LLVertexBuffer::unbind();	  	sRenderBump = gSavedSettings.getBOOL("RenderObjectBump"); diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 9c78048c46..3c4e389ce0 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -111,6 +111,7 @@ public:  	void destroyGL();  	void restoreGL();  	void resetVertexBuffers(); +	void doResetVertexBuffers();  	void resizeScreenTexture();  	void releaseGLBuffers();  	void releaseScreenBuffers(); @@ -653,6 +654,8 @@ protected:  	bool mGroupQ2Locked;  	bool mGroupQ1Locked; +	bool mResetVertexBuffers; //if true, clear vertex buffers on next update +  	LLViewerObject::vobj_list_t		mCreateQ;  	LLDrawable::drawable_set_t		mRetexturedList; diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 8baaa14595..b616e2327b 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -615,6 +615,9 @@       name="PanelFocusBackgroundColor"       reference="DkGray2" />      <color +     name="PanelNotificationBackground" +     value="1 0.3 0.3 0" /> +    <color       name="ParcelHoverColor"       reference="White" />      <color @@ -747,6 +750,9 @@       name="TitleBarFocusColor"       reference="White_10" />      <color +     name="ToastBackground" +     value="0.3 0.3 0.3 0" /> +    <color       name="ToolTipBgColor"       value="0.937 0.89 0.655 1" />      <color diff --git a/indra/newview/skins/default/textures/checker.png b/indra/newview/skins/default/textures/checker.pngBinary files differ new file mode 100644 index 0000000000..1ab87e3f02 --- /dev/null +++ b/indra/newview/skins/default/textures/checker.png diff --git a/indra/newview/skins/default/textures/map_avatar_unknown_32.tga b/indra/newview/skins/default/textures/map_avatar_unknown_32.tgaBinary files differ new file mode 100644 index 0000000000..d1192478c6 --- /dev/null +++ b/indra/newview/skins/default/textures/map_avatar_unknown_32.tga diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index e4a8622a4b..eabcc68916 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -122,6 +122,8 @@ with the same filename but different name    <texture name="Checkbox_Press" file_name="widgets/Checkbox_Press.png" preload="true" />    <texture name="Check_Mark" file_name="icons/check_mark.png" preload="true" /> +  <texture name="Checker" file_name="checker.png" preload="false" /> +      <texture name="Command_AboutLand_Icon"    file_name="toolbar_icons/land.png"         preload="true" />    <texture name="Command_Appearance_Icon"   file_name="toolbar_icons/appearance.png"   preload="true" />    <texture name="Command_Avatar_Icon"       file_name="toolbar_icons/avatars.png"      preload="true" /> diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index 1d5a6740b7..08f29dc01a 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1210,7 +1210,7 @@ Only large parcels can be listed in search.               type="string"               length="1"               follows="left|top" -             text_color="white" +             text_color="White"               height="16"               layout="topleft"               left="10" @@ -1500,7 +1500,7 @@ Only large parcels can be listed in search.               layout="topleft"               left="20"               name="Snapshot:" -             text_color="white" +             text_color="White"               top="225"               width="200">                  Snapshot: @@ -1546,7 +1546,7 @@ Only large parcels can be listed in search.               layout="topleft"               left="255"               top="282" -             text_color="white" +             text_color="White"               name="landing_point"               word_wrap="true"               width="200"> @@ -1576,7 +1576,7 @@ Only large parcels can be listed in search.              <text               type="string"               length="1" -             text_color="white" +             text_color="White"               follows="left|top"               height="16"               layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_anim_preview.xml new file mode 100644 index 0000000000..b5538a511c --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_animation_anim_preview.xml @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + legacy_header_height="18" + height="190" + layout="topleft" + name="Anim Preview" + help_topic="animation_anim_preview" + title="ANIMATION.ANIM" + width="300"> +    <text +     type="string" +     length="1" +     follows="left|top" +     height="15" +     layout="topleft" +     left="10" +     mouse_opaque="false" +     name="name_label" +     top="20" +     width="275"> +        Name: +    </text> +    <line_editor +     border_style="line" +     border_thickness="1" +     follows="left|top|right" +     height="19" +     layout="topleft" +     left_delta="0" +     max_length_bytes="63" +     name="name_form" +     top_pad="0" +     width="280" /> +    <text +     type="string" +     length="1" +     follows="left|top" +     height="15" +     layout="topleft" +     left_delta="0" +     mouse_opaque="false" +     name="description_label" +     top_pad="10" +     width="270"> +        Description: +    </text> +    <line_editor +     border_style="line" +     border_thickness="1" +     follows="left|top|right" +     height="19" +     layout="topleft" +     left_delta="0" +     max_length_bytes="127" +     name="description_form" +     top_pad="0" +     width="280" /> +    <button +     follows="left|bottom" +     height="22" +     label="Upload (L$[AMOUNT])" +     layout="topleft" +     left="45" +     name="ok_btn" +     top_pad="60" +     width="150" /> +    <button +     follows="right|bottom" +     height="22" +     label="Cancel" +     label_selected="Cancel" +     layout="topleft" +     name="cancel_btn" +     left_pad="5" +     width="90" /> +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_bvh_preview.xml index cb6b2f6ebc..cb6b2f6ebc 100644 --- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_animation_bvh_preview.xml diff --git a/indra/newview/skins/default/xui/en/floater_buy_contents.xml b/indra/newview/skins/default/xui/en/floater_buy_contents.xml index 92001534e7..ac96a70805 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_contents.xml @@ -62,7 +62,7 @@       layout="topleft"       left="10"       name="buy_text" -     text_color="white" +     text_color="White"       top="220"       use_ellipses="true"        width="260"> diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml index 6afa24d04a..553c5d51d0 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml @@ -215,7 +215,7 @@      <text       type="string"       length="1" -     text_color="0.7 0.7 0.7 0.5" +     text_color="LtGray_50"       follows="top|left"       layout="topleft"       halign="right" @@ -229,7 +229,7 @@      <text       type="string"       length="1" -     text_color="0.7 0.7 0.7 0.5" +     text_color="LtGray_50"       follows="top|left"       layout="topleft"       halign="right" @@ -243,7 +243,7 @@ Re-enter amount to see the latest exchange rate.      <text       type="string"       length="1" -     text_color="0.7 0.7 0.7 0.5" +     text_color="LtGray_50"       follows="top|left"       layout="topleft"       halign="right" @@ -257,7 +257,7 @@ Re-enter amount to see the latest exchange rate.      <text       type="string"       length="1" -     text_color="0.7 0.7 0.7 0.5" +     text_color="LtGray_50"       follows="top|left"       layout="topleft"       halign="right" diff --git a/indra/newview/skins/default/xui/en/floater_buy_object.xml b/indra/newview/skins/default/xui/en/floater_buy_object.xml index 8dfb6ba00c..5fdd4aa49d 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_object.xml @@ -89,7 +89,7 @@       left_delta="0"  	 line_spacing.pixels="7"       name="buy_text" -     text_color="white" +     text_color="White"       top_pad="5"       use_ellipses="true"       width="260" @@ -106,7 +106,7 @@ Buy for L$[AMOUNT] from:       left_delta="0"  	 line_spacing.pixels="7"       name="buy_name_text" -     text_color="white" +     text_color="White"       top_pad="5"       use_ellipses="true"       width="260"> diff --git a/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml index 498a9b6ce0..6f387f4800 100644 --- a/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml +++ b/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml @@ -132,16 +132,16 @@      </panel>      <layout_stack name="import_progress_indicator" orientation="vertical" left="0" height="440" top="0" width="333" follows="all" visible="false">        <layout_panel /> -      <layout_panel height="45" auto_resize="false"> -        <layout_stack orientation="horizontal" left="0" height="45" top="0" width="333" follows="all"> +      <layout_panel height="24" auto_resize="false"> +        <layout_stack orientation="horizontal" left="0" height="24" top="0" width="333" follows="all">            <layout_panel width="0" /> -          <layout_panel width="45" auto_resize="false"> +          <layout_panel width="24" auto_resize="false">              <loading_indicator -                height="45" +                height="24"                  layout="topleft"                  left="0"                  top="0" -                width="45" /> +                width="24" />            </layout_panel>            <layout_panel width="0" />          </layout_stack> diff --git a/indra/newview/skins/default/xui/en/floater_preview_animation.xml b/indra/newview/skins/default/xui/en/floater_preview_animation.xml index 8427c7b06f..3ea5f54f2c 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_animation.xml @@ -41,18 +41,26 @@       label_selected="Stop"       layout="topleft"       left="10" -     name="Anim play btn" +     name="Inworld"       tool_tip="Play this animation so that others can see it"       top="47" -     width="125" /> +     width="125"> +       <button.commit_callback +        function="PreviewAnim.Play" +        parameter="Inworld" />  +    </button>      <button       height="20"       label="Play Locally"       label_selected="Stop"       layout="topleft"       left_pad="5" -     name="Anim audition btn" +     name="Locally"       tool_tip="Play this animation so that only you can see it"       top_delta="0" -     width="125" /> +     width="125"> +       <button.commit_callback +        function="PreviewAnim.Play" +        parameter="Locally" />  +    </button>  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml index cea19ec75c..d99b29f324 100644 --- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml @@ -71,7 +71,7 @@               layout="topleft"               left_pad="10"               name="user_text" -             text_color="white" +             text_color="White"               top="4"               use_ellipses="true"               value="My Avatar:" diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml index 8d14c974b4..880dddce19 100644 --- a/indra/newview/skins/default/xui/en/inspect_object.xml +++ b/indra/newview/skins/default/xui/en/inspect_object.xml @@ -56,7 +56,7 @@ owner secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about     halign="right"     right="-5"     name="price_text" -   text_color="white" +   text_color="White"     top="60"     font_shadow="none"     width="60"> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index cd8550b00d..1d11abcf73 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -153,6 +153,13 @@           function="BuyCurrency" />        </menu_item_call>        <menu_item_call +         label="Merchant Outbox..." +         name="MerchantOutbox"> +        <menu_item_call.on_click +         function="Floater.ToggleOrBringToFront" +         parameter="outbox" /> +      </menu_item_call> +      <menu_item_call             label="Account dashboard..."             name="Manage My Account">          <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index af75d49353..59dd17ea9d 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -1667,7 +1667,7 @@ Unable to create output file: [FILE]     icon="alertmodal.tga"     name="DoNotSupportBulkAnimationUpload"     type="alertmodal"> -[APP_NAME] does not currently support bulk upload of animation files. +[APP_NAME] does not currently support bulk upload of BVH format animation files.    <tag>fail</tag>    </notification> @@ -6409,11 +6409,11 @@ Grant this request?      <form name="form">        <button         index="-2" -       name="Mute" +       name="Client_Side_Mute"         text="Block"/>        <button         index="-1" -       name="Ignore" +       name="Client_Side_Ignore"         text="Ignore"/>      </form>    </notification> @@ -6428,11 +6428,11 @@ Grant this request?      <form name="form">        <button         index="-2" -       name="Mute" +       name="Client_Side_Mute"         text="Block"/>        <button         index="-1" -       name="Ignore" +       name="Client_Side_Ignore"         text="Ignore"/>      </form>    </notification> diff --git a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml index 1e6a31d388..7c67fd7f83 100644 --- a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml @@ -28,7 +28,7 @@       layout="topleft"       left_pad="10"       name="title_text" -     text_color="white" +     text_color="White"       top="5"       width="250">          Block List diff --git a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml index df459b4083..4b05ab27e4 100644 --- a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml @@ -29,7 +29,7 @@       width="380" />      <icon       height="16" -     color="0.75 0.75 0.75 1" +     color="LtGray"       follows="top|left"       image_name="Inv_Object"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml index 69a692e2c4..f34b913218 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -164,7 +164,7 @@       layout="topleft"       left_pad="8"       name="edit_wearable_title" -     text_color="white" +     text_color="White"       top="3"       value="Editing Shape"       use_ellipses="true" @@ -190,7 +190,7 @@           layout="topleft"           left="10"           name="description_text" -         text_color="white" +         text_color="White"           top="10"           value="Shape:"           width="150" /> @@ -254,7 +254,7 @@           name="description"           prevalidate_callback="ascii"           select_on_focus="true" -         text_color="black" +         text_color="Black"           top_pad="3"           width="290" />      </panel> diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml index 4251128714..2e5d650902 100644 --- a/indra/newview/skins/default/xui/en/panel_instant_message.xml +++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml @@ -15,7 +15,7 @@      <panel       background_visible="true"       bevel_style="in" -     bg_alpha_color="black" +     bg_alpha_color="Black"       follows="top"       height="24"       label="im_header" @@ -64,7 +64,7 @@           left_pad="5"           name="user_name"           parse_urls="false" -         text_color="white" +         text_color="White"           top="8"           translate="false"           use_ellipses="true" @@ -90,7 +90,7 @@       layout="topleft"       left="10"       name="message" -     text_color="white" +     text_color="White"       top="33"       use_ellipses="true"       value="" diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml index f6f62ac54e..94c468e1bb 100644 --- a/indra/newview/skins/default/xui/en/panel_notification.xml +++ b/indra/newview/skins/default/xui/en/panel_notification.xml @@ -3,8 +3,8 @@    background_opaque="false"        border_visible="false"    background_visible="true" -  bg_alpha_color="1 0.3 0.3 0" -  bg_opaque_color="1 0.3 0.3 0" +  bg_alpha_color="PanelNotificationBackground" +  bg_opaque_color="PanelNotificationBackground"    label="notification_panel"    layout="topleft"    left="0" @@ -20,8 +20,8 @@        border_visible="false"   bevel_style="none"      background_visible="true" -  bg_alpha_color="0.3 0.3 0.3 0" -  bg_opaque_color="0.3 0.3 0.3 0" +  bg_alpha_color="ToastBackground" +  bg_opaque_color="ToastBackground"      follows="left|right|top"      height="100"      label="info_panel" @@ -39,7 +39,7 @@        left="10"        name="text_box"        read_only="true" -      text_color="white" +      text_color="White"        top="10"        visible="false"         width="285" @@ -52,7 +52,7 @@        layout="topleft"        left="10"        name="caution_text_box" -      text_color="1 0.82 0.46 1" +      text_color="NotifyCautionBoxColor"        top="10"        visible="false"        width="285" @@ -60,7 +60,7 @@      <text_editor      	h_pad="0"  	v_pad="0" -      bg_readonly_color="0.0 0.0 0.0 0" +      bg_readonly_color="Transparent"        border_visible="false"        embedded_items="false"        enabled="false" @@ -73,8 +73,8 @@        name="text_editor_box"        read_only="true"        tab_stop="false" -      text_color="white" -      text_readonly_color="white" +      text_color="White" +      text_readonly_color="White"        top="10"        visible="false"        width="285" diff --git a/indra/newview/skins/default/xui/en/panel_online_status_toast.xml b/indra/newview/skins/default/xui/en/panel_online_status_toast.xml index b1a7697e83..dadbd9c9ab 100644 --- a/indra/newview/skins/default/xui/en/panel_online_status_toast.xml +++ b/indra/newview/skins/default/xui/en/panel_online_status_toast.xml @@ -25,7 +25,7 @@       layout="topleft"       left_pad="5"       name="message" -     text_color="white" +     text_color="White"       top="15"       use_ellipses="true"       value="" diff --git a/indra/newview/skins/default/xui/en/panel_sys_well_item.xml b/indra/newview/skins/default/xui/en/panel_sys_well_item.xml index 5e74689c5a..007b73a4bc 100644 --- a/indra/newview/skins/default/xui/en/panel_sys_well_item.xml +++ b/indra/newview/skins/default/xui/en/panel_sys_well_item.xml @@ -13,7 +13,7 @@    follows="left|right"    background_opaque="false"    background_visible="true" -  bg_alpha_color="0.0 0.0 0.0 0.0" > +  bg_alpha_color="SysWellItemUnselected" >    <text      clip_partial="true"       top="2" @@ -22,7 +22,7 @@      height="28"      layout="topleft"      follows="right|left" -    text_color="white" +    text_color="White"      use_ellipses="true"      word_wrap="true"      mouse_opaque="false" diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml index c89e1dc215..c5b0be0616 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml @@ -44,7 +44,7 @@       parse_urls="false"       use_ellipses="true"       name="region" -     text_color="white" +     text_color="White"       top="4"       value="..."       width="330" /> diff --git a/indra/newview/skins/default/xui/en/panel_toast.xml b/indra/newview/skins/default/xui/en/panel_toast.xml index 062c403a26..0b5aff54ca 100644 --- a/indra/newview/skins/default/xui/en/panel_toast.xml +++ b/indra/newview/skins/default/xui/en/panel_toast.xml @@ -59,7 +59,7 @@     left="20"     name="toast_text"     word_wrap="true" -   text_color="white" +   text_color="White"     top="5"     translate="false"     use_ellipses="true" diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index fcba937bdb..29aa6d1039 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -112,7 +112,7 @@                          bg_opaque_color="InventoryBackgroundColor"                          background_visible="true"                          background_opaque="true" -                        tool_tip="Drag and drop items to your inventory to manage and use them" +                        tool_tip="Drag and drop items to your inventory to use them"                          >                          <text  							name="inbox_inventory_placeholder" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 3351ffe00f..208f4c2d32 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -369,6 +369,9 @@ Please try logging in again in a minute.</string>  	<string name="anim_yes_happy">Yes (Happy)</string>  	<string name="anim_yes_head">Yes</string> +	<!-- build floater --> +	<string name="multiple_textures">Multiple</string> +  	<!-- world map -->  	<string name="texture_loading">Loading...</string>  	<string name="worldmap_offline">Offline</string> @@ -2037,7 +2040,7 @@ Returns a string with the requested data about the region  	<string name="PlacesNoMatchingItems">Didn't find what you're looking for? Try [secondlife:///app/search/places/[SEARCH_TERM] Search].</string>  	<string name="FavoritesNoMatchingItems">Drag a landmark here to add it to your favorites.</string>  	<string name="InventoryNoTexture">You do not have a copy of this texture in your inventory</string> -	<string name="InventoryInboxNoItems">Certain items you receive, such as premium gifts, will appear here.  You may then drag them into your inventory.</string> +	<string name="InventoryInboxNoItems">Your Marketplace purchases will appear here. You may then drag them into your inventory to use them.</string>  	<string name="MarketplaceURL">https://marketplace.[MARKETPLACE_DOMAIN_NAME]/</string>  	<string name="MarketplaceURL_CreateStore">http://community.secondlife.com/t5/English-Knowledge-Base/Selling-in-the-Marketplace/ta-p/700193#Section_.4</string>  	<string name="MarketplaceURL_Dashboard">https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/dashboard</string> diff --git a/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml b/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml index 1bb3188cc8..8a4ccb19f9 100644 --- a/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml @@ -17,13 +17,13 @@    <voice_call_invited_style     font="SansSerifSmall"     font.style="NORMAL" -   color="0.5 0.5 0.5 0.5"/> +   color="AvatarListItemIconVoiceInvitedColor"/>    <!-- styles for avatar item JOINED to voice call -->    <voice_call_joined_style     font="SansSerifSmall"     font.style="NORMAL" -   color="white"/> +   color="White"/>    <!-- styles for avatar item which HAS LEFT voice call -->    <voice_call_left_style @@ -35,11 +35,11 @@    <online_style     font="SansSerifSmall"     font.style="NORMAL" -   color="white"/> +   color="White"/>    <!-- styles for OFFLINE avatar item -->    <offline_style     font="SansSerifSmall"     font.style="NORMAL" -   color="0.5 0.5 0.5 1.0"/> +   color="Gray"/>  </avatar_list_item> diff --git a/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml b/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml index 0eec002006..0016a8cf53 100644 --- a/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml @@ -24,7 +24,7 @@     parse_urls="false"     use_ellipses="true"     name="item_name" -   text_color="white" +   text_color="White"     top="5"     value="..."     width="359" /> diff --git a/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml b/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml index 96d72c78a6..d83f44737e 100644 --- a/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml @@ -24,7 +24,7 @@     parse_urls="false"     use_ellipses="true"     name="item_name" -   text_color="white" +   text_color="White"     top="5"     value="..."     width="359" /> diff --git a/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml index 6c60624805..8c805da048 100644 --- a/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml @@ -9,7 +9,7 @@   width="380">    <item_icon      height="16" -    color="0.75 0.75 0.75 1" +    color="LtGray"      follows="top|left"      image_name="Inv_Object"      layout="topleft" | 
