diff options
126 files changed, 1570 insertions, 874 deletions
| diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 2f6ef2b663..f58d4937d4 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -1329,8 +1329,6 @@ void LLGLState::initClass()  	sStateMap[GL_MULTISAMPLE_ARB] = GL_FALSE;  	glDisable(GL_MULTISAMPLE_ARB); - -	glEnableClientState(GL_VERTEX_ARRAY);  }  //static @@ -1604,7 +1602,7 @@ void LLGLState::checkTextureChannels(const std::string& msg)  void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask)  { -	if (!gDebugGL) +	if (!gDebugGL || LLGLSLShader::sNoFixedFunction)  	{  		return;  	} @@ -1661,7 +1659,7 @@ void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask)  	}; -	for (S32 j = 0; j < 4; j++) +	for (S32 j = 1; j < 4; j++)  	{  		if (glIsEnabled(value[j]))  		{ @@ -1875,79 +1873,6 @@ void LLGLManager::initGLStates()  //////////////////////////////////////////////////////////////////////////////// -void enable_vertex_weighting(const S32 index) -{ -#if GL_ARB_vertex_program -	if (index > 0) glEnableVertexAttribArrayARB(index);	// vertex weights -#endif -} - -void disable_vertex_weighting(const S32 index) -{ -#if GL_ARB_vertex_program -	if (index > 0) glDisableVertexAttribArrayARB(index);	// vertex weights -#endif -} - -void enable_binormals(const S32 index) -{ -#if GL_ARB_vertex_program -	if (index > 0) -	{ -		glEnableVertexAttribArrayARB(index);	// binormals -	} -#endif -} - -void disable_binormals(const S32 index) -{ -#if GL_ARB_vertex_program -	if (index > 0) -	{ -		glDisableVertexAttribArrayARB(index);	// binormals -	} -#endif -} - - -void enable_cloth_weights(const S32 index) -{ -#if GL_ARB_vertex_program -	if (index > 0)	glEnableVertexAttribArrayARB(index); -#endif -} - -void disable_cloth_weights(const S32 index) -{ -#if GL_ARB_vertex_program -	if (index > 0) glDisableVertexAttribArrayARB(index); -#endif -} - -void set_vertex_weights(const S32 index, const U32 stride, const F32 *weights) -{ -#if GL_ARB_vertex_program -	if (index > 0) glVertexAttribPointerARB(index, 1, GL_FLOAT, FALSE, stride, weights); -	stop_glerror(); -#endif -} - -void set_vertex_clothing_weights(const S32 index, const U32 stride, const LLVector4 *weights) -{ -#if GL_ARB_vertex_program -	if (index > 0) glVertexAttribPointerARB(index, 4, GL_FLOAT, TRUE, stride, weights); -	stop_glerror(); -#endif -} - -void set_binormals(const S32 index, const U32 stride,const LLVector3 *binormals) -{ -#if GL_ARB_vertex_program -	if (index > 0) glVertexAttribPointerARB(index, 3, GL_FLOAT, FALSE, stride, binormals); -	stop_glerror(); -#endif -} -  void parse_gl_version( S32* major, S32* minor, S32* release, std::string* vendor_specific )  {  	// GL_VERSION returns a null-terminated string with the format:  diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index d736133f3f..495e523c31 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -252,7 +252,7 @@ public:  	static void dumpStates();  	static void checkStates(const std::string& msg = "");  	static void checkTextureChannels(const std::string& msg = ""); -	static void checkClientArrays(const std::string& msg = "", U32 data_mask = 0x0001); +	static void checkClientArrays(const std::string& msg = "", U32 data_mask = 0);  protected:  	static boost::unordered_map<LLGLenum, LLGLboolean> sStateMap; @@ -419,15 +419,7 @@ extern LLMatrix4 gGLObliqueProjectionInverse;  #include "llglstates.h"  void init_glstates(); -void enable_vertex_weighting(const S32 index); -void disable_vertex_weighting(const S32 index); -void enable_binormals(const S32 index); -void disable_binormals(const S32 index); -void enable_cloth_weights(const S32 index); -void disable_cloth_weights(const S32 index); -void set_vertex_weights(const S32 index, const U32 stride, const F32 *weights); -void set_vertex_clothing_weights(const S32 index, const U32 stride, const LLVector4 *weights); -void set_binormals(const S32 index, const U32 stride, const LLVector3 *binormals); +  void parse_gl_version( S32* major, S32* minor, S32* release, std::string* vendor_specific );  extern BOOL gClothRipple; diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index f51d83abe4..b6cb84d10c 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -31,6 +31,7 @@  #include "llshadermgr.h"  #include "llfile.h"  #include "llrender.h" +#include "llvertexbuffer.h"  #if LL_DARWIN  #include "OpenGL/OpenGL.h" @@ -386,6 +387,7 @@ void LLGLSLShader::bind()  	gGL.flush();  	if (gGLManager.mHasShaderObjects)  	{ +		LLVertexBuffer::unbind();  		glUseProgramObjectARB(mProgramObject);  		sCurBoundShader = mProgramObject;  		sCurBoundShaderPtr = this; @@ -411,6 +413,7 @@ void LLGLSLShader::unbind()  				stop_glerror();  			}  		} +		LLVertexBuffer::unbind();  		glUseProgramObjectARB(0);  		sCurBoundShader = 0;  		sCurBoundShaderPtr = NULL; @@ -420,6 +423,7 @@ void LLGLSLShader::unbind()  void LLGLSLShader::bindNoShader(void)  { +	LLVertexBuffer::unbind();  	glUseProgramObjectARB(0);  	sCurBoundShader = 0;  	sCurBoundShaderPtr = NULL; diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index d72918b15d..da85bc202c 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -1580,6 +1580,105 @@ void LLRender::color3fv(const GLfloat* c)  	color4f(c[0],c[1],c[2],1);  } +void LLRender::diffuseColor3f(F32 r, F32 g, F32 b) +{ +	LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr; +	S32 loc = -1; +	if (shader) +	{ +		loc = shader->getAttribLocation(LLVertexBuffer::TYPE_COLOR); +	} + +	if (loc >= 0) +	{ +		glVertexAttrib3fARB(loc, r,g,b); +	} +	else +	{ +		glColor3f(r,g,b); +	} +} + +void LLRender::diffuseColor3fv(const F32* c) +{ +	LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr; +	S32 loc = -1; +	if (shader) +	{ +		loc = shader->getAttribLocation(LLVertexBuffer::TYPE_COLOR); +	} + +	if (loc >= 0) +	{ +		glVertexAttrib3fvARB(loc, c); +	} +	else +	{ +		glColor3fv(c); +	} +} + +void LLRender::diffuseColor4f(F32 r, F32 g, F32 b, F32 a) +{ +	LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr; +	S32 loc = -1; +	if (shader) +	{ +		loc = shader->getAttribLocation(LLVertexBuffer::TYPE_COLOR); +	} + +	if (loc >= 0) +	{ +		glVertexAttrib4fARB(loc, r,g,b,a); +	} +	else +	{ +		glColor4f(r,g,b,a); +	} + +} + +void LLRender::diffuseColor4fv(const F32* c) +{ +	LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr; +	S32 loc = -1; +	if (shader) +	{ +		loc = shader->getAttribLocation(LLVertexBuffer::TYPE_COLOR); +	} + +	if (loc >= 0) +	{ +		glVertexAttrib4fvARB(loc, c); +	} +	else +	{ +		glColor4fv(c); +	} +} + +void LLRender::diffuseColor4ubv(const U8* c) +{ +	LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr; +	S32 loc = -1; +	if (shader) +	{ +		loc = shader->getAttribLocation(LLVertexBuffer::TYPE_COLOR); +	} + +	if (loc >= 0) +	{ +		glVertexAttrib4ubvARB(loc, c); +	} +	else +	{ +		glColor4ubv(c); +	} +} + + + +  void LLRender::debugTexUnits(void)  {  	LL_INFOS("TextureUnit") << "Active TexUnit: " << mCurrTextureUnitIndex << LL_ENDL; diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index 9eedebe2ce..5f97bff1c4 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -350,6 +350,12 @@ public:  	void color3fv(const GLfloat* c);  	void color4ubv(const GLubyte* c); +	void diffuseColor3f(F32 r, F32 g, F32 b); +	void diffuseColor3fv(const F32* c); +	void diffuseColor4f(F32 r, F32 g, F32 b, F32 a); +	void diffuseColor4fv(const F32* c); +	void diffuseColor4ubv(const U8* c); +  	void vertexBatchPreTransformed(LLVector3* verts, S32 vert_count);  	void vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, S32 vert_count);  	void vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, LLColor4U*, S32 vert_count); diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 1180afa631..30f73bf2c6 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -130,6 +130,7 @@ S32 LLVertexBuffer::sTypeSize[LLVertexBuffer::TYPE_MAX] =  	sizeof(LLVector2), // TYPE_TEXCOORD2,  	sizeof(LLVector2), // TYPE_TEXCOORD3,  	sizeof(LLColor4U), // TYPE_COLOR, +	sizeof(U8),		   // TYPE_EMISSIVE  	sizeof(LLVector4), // TYPE_BINORMAL,  	sizeof(F32),	   // TYPE_WEIGHT,  	sizeof(LLVector4), // TYPE_WEIGHT4, @@ -156,36 +157,79 @@ void LLVertexBuffer::setupClientArrays(U32 data_mask)  		llerrs << "Cannot use LLGLImmediate and LLVertexBuffer simultaneously!" << llendl;  	}*/ +	LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr; +  	if (sLastMask != data_mask)  	{ +		llassert(!LLGLSLShader::sNoFixedFunction || shader != NULL); +		static LLGLSLShader* last_shader = LLGLSLShader::sCurBoundShaderPtr; +		llassert(sLastMask == 0 || last_shader == shader); +		last_shader = shader; +  		U32 mask[] =  		{  			MAP_VERTEX,  			MAP_NORMAL,  			MAP_TEXCOORD0,  			MAP_COLOR, +			MAP_EMISSIVE, +			MAP_WEIGHT, +			MAP_WEIGHT4, +			MAP_BINORMAL, +			MAP_CLOTHWEIGHT,  		}; +		U32 type[] = +		{ +			TYPE_VERTEX, +			TYPE_NORMAL, +			TYPE_TEXCOORD0, +			TYPE_COLOR, +			TYPE_EMISSIVE, +			TYPE_WEIGHT, +			TYPE_WEIGHT4, +			TYPE_BINORMAL, +			TYPE_CLOTHWEIGHT, +		}; +  		GLenum array[] =  		{  			GL_VERTEX_ARRAY,  			GL_NORMAL_ARRAY,  			GL_TEXTURE_COORD_ARRAY,  			GL_COLOR_ARRAY, +			0, +			0, +			0, +			0, +			0,  		};  		BOOL error = FALSE; -		for (U32 i = 0; i < 4; ++i) +		for (U32 i = 0; i < 9; ++i)  		{ +			S32 loc = -1; +			if (shader) +			{ +				loc = shader->getAttribLocation(type[i]); +			} +  			if (sLastMask & mask[i])  			{ //was enabled -				if (!(data_mask & mask[i]) && i > 0) +				if (!(data_mask & mask[i]))  				{ //needs to be disabled -					glDisableClientState(array[i]); +					if (loc >= 0) +					{ +						glDisableVertexAttribArrayARB(loc); +					} +					else if (!shader) +					{ +						glDisableClientState(array[i]); +					}  				} -				else if (gDebugGL) -				{ //needs to be enabled, make sure it was (DEBUG TEMPORARY) -					if (i > 0 && !glIsEnabled(array[i])) +				else if (gDebugGL && !shader && array[i]) +				{ //needs to be enabled, make sure it was (DEBUG) +					if (loc < 0 && !glIsEnabled(array[i]))  					{  						if (gDebugSession)  						{ @@ -201,11 +245,18 @@ void LLVertexBuffer::setupClientArrays(U32 data_mask)  			}  			else   			{	//was disabled -				if (data_mask & mask[i] && i > 0) +				if (data_mask & mask[i])  				{ //needs to be enabled -					glEnableClientState(array[i]); +					if (loc >= 0) +					{ +						glEnableVertexAttribArrayARB(loc); +					} +					else if (!shader) +					{ +						glEnableClientState(array[i]); +					}  				} -				else if (gDebugGL && i > 0 && glIsEnabled(array[i])) +				else if (!shader && array[i] && gDebugGL && glIsEnabled(array[i]))  				{ //needs to be disabled, make sure it was (DEBUG TEMPORARY)  					if (gDebugSession)  					{ @@ -232,62 +283,71 @@ void LLVertexBuffer::setupClientArrays(U32 data_mask)  			MAP_TEXCOORD3  		}; +		U32 type_tc[] =  +		{ +			TYPE_TEXCOORD1, +			TYPE_TEXCOORD2, +			TYPE_TEXCOORD3 +		}; +  		for (U32 i = 0; i < 3; i++)  		{ +			S32 loc = -1; +			if (shader) +			{ +				loc = shader->getAttribLocation(type_tc[i]); +			} +  			if (sLastMask & map_tc[i])  			{  				if (!(data_mask & map_tc[i])) -				{ -					glClientActiveTextureARB(GL_TEXTURE1_ARB+i); -					glDisableClientState(GL_TEXTURE_COORD_ARRAY); -					glClientActiveTextureARB(GL_TEXTURE0_ARB); +				{ //disable +					if (loc >= 0) +					{ +						glDisableVertexAttribArrayARB(loc); +					} +					else if (!shader) +					{ +						glClientActiveTextureARB(GL_TEXTURE1_ARB+i); +						glDisableClientState(GL_TEXTURE_COORD_ARRAY); +						glClientActiveTextureARB(GL_TEXTURE0_ARB); +					}  				}  			}  			else if (data_mask & map_tc[i])  			{ -				glClientActiveTextureARB(GL_TEXTURE1_ARB+i); -				glEnableClientState(GL_TEXTURE_COORD_ARRAY); -				glClientActiveTextureARB(GL_TEXTURE0_ARB); +				if (loc >= 0) +				{ +					glEnableVertexAttribArrayARB(loc); +				} +				else if (!shader) +				{ +					glClientActiveTextureARB(GL_TEXTURE1_ARB+i); +					glEnableClientState(GL_TEXTURE_COORD_ARRAY); +					glClientActiveTextureARB(GL_TEXTURE0_ARB); +				}  			}  		} -		if (sLastMask & MAP_BINORMAL) +		if (!shader)  		{ -			if (!(data_mask & MAP_BINORMAL)) +			if (sLastMask & MAP_BINORMAL)  			{ -				glClientActiveTextureARB(GL_TEXTURE2_ARB); -				glDisableClientState(GL_TEXTURE_COORD_ARRAY); -				glClientActiveTextureARB(GL_TEXTURE0_ARB); +				if (!(data_mask & MAP_BINORMAL)) +				{ +					glClientActiveTextureARB(GL_TEXTURE2_ARB); +					glDisableClientState(GL_TEXTURE_COORD_ARRAY); +					glClientActiveTextureARB(GL_TEXTURE0_ARB); +				}  			} -		} -		else if (data_mask & MAP_BINORMAL) -		{ -			glClientActiveTextureARB(GL_TEXTURE2_ARB); -			glEnableClientState(GL_TEXTURE_COORD_ARRAY); -			glClientActiveTextureARB(GL_TEXTURE0_ARB); -		} -	 -		if (sLastMask & MAP_WEIGHT4) -		{ -			if (sWeight4Loc < 0) +			else if (data_mask & MAP_BINORMAL)  			{ -				llerrs << "Weighting disabled but vertex buffer still bound!" << llendl; -			} - -			if (!(data_mask & MAP_WEIGHT4)) -			{ //disable 4-component skin weight			 -				glDisableVertexAttribArrayARB(sWeight4Loc); -			} -		} -		else if (data_mask & MAP_WEIGHT4) -		{ -			if (sWeight4Loc >= 0) -			{ //enable 4-component skin weight -				glEnableVertexAttribArrayARB(sWeight4Loc); +				glClientActiveTextureARB(GL_TEXTURE2_ARB); +				glEnableClientState(GL_TEXTURE_COORD_ARRAY); +				glClientActiveTextureARB(GL_TEXTURE0_ARB);  			}  		} -				 - +		  		sLastMask = data_mask;  	}  } @@ -1592,6 +1652,10 @@ bool LLVertexBuffer::getColorStrider(LLStrider<LLColor4U>& strider, S32 index, S  {  	return VertexBufferStrider<LLColor4U,TYPE_COLOR>::get(*this, strider, index, count, map_range);  } +bool LLVertexBuffer::getEmissiveStrider(LLStrider<U8>& strider, S32 index, S32 count, bool map_range) +{ +	return VertexBufferStrider<U8,TYPE_EMISSIVE>::get(*this, strider, index, count, map_range); +}  bool LLVertexBuffer::getWeightStrider(LLStrider<F32>& strider, S32 index, S32 count, bool map_range)  {  	return VertexBufferStrider<F32,TYPE_WEIGHT>::get(*this, strider, index, count, map_range); @@ -1810,46 +1874,166 @@ void LLVertexBuffer::setupVertexBuffer(U32 data_mask) const  		llerrs << "LLVertexBuffer::setupVertexBuffer missing required components for supplied data mask." << llendl;  	} +	LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr; + +	//assert that fixed function is allowed OR a shader is currently bound +	llassert(!LLGLSLShader::sNoFixedFunction || shader != NULL); +  	if (data_mask & MAP_NORMAL)  	{ -		glNormalPointer(GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_NORMAL], (void*)(base + mOffsets[TYPE_NORMAL])); +		S32 loc = -1; +		if (shader) +		{ +			loc = shader->getAttribLocation(TYPE_NORMAL); +		} + +		if (loc >= 0) +		{ +			glVertexAttribPointerARB(loc, 3, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_NORMAL], (void*)(base + mOffsets[TYPE_NORMAL])); +		} +		else if (!shader) +		{ +			glNormalPointer(GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_NORMAL], (void*)(base + mOffsets[TYPE_NORMAL])); +		}  	}  	if (data_mask & MAP_TEXCOORD3)  	{ -		glClientActiveTextureARB(GL_TEXTURE3_ARB); -		glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD3], (void*)(base + mOffsets[TYPE_TEXCOORD3])); -		glClientActiveTextureARB(GL_TEXTURE0_ARB); +		S32 loc = -1; +		if (shader) +		{ +			loc = shader->getAttribLocation(TYPE_TEXCOORD3); +		} + +		if (loc >= 0) +		{ +			glVertexAttribPointerARB(loc,2,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD3], (void*)(base + mOffsets[TYPE_TEXCOORD3])); +		} +		else if (!shader) +		{ +			glClientActiveTextureARB(GL_TEXTURE3_ARB); +			glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD3], (void*)(base + mOffsets[TYPE_TEXCOORD3])); +			glClientActiveTextureARB(GL_TEXTURE0_ARB); +		}  	}  	if (data_mask & MAP_TEXCOORD2)  	{ -		glClientActiveTextureARB(GL_TEXTURE2_ARB); -		glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD2], (void*)(base + mOffsets[TYPE_TEXCOORD2])); -		glClientActiveTextureARB(GL_TEXTURE0_ARB); +		S32 loc = -1; +		if (shader) +		{ +			loc = shader->getAttribLocation(TYPE_TEXCOORD2); +		} + +		if (loc >= 0) +		{ +			glVertexAttribPointerARB(loc,2,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD2], (void*)(base + mOffsets[TYPE_TEXCOORD2])); +		} +		else if (!shader) +		{ +			glClientActiveTextureARB(GL_TEXTURE2_ARB); +			glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD2], (void*)(base + mOffsets[TYPE_TEXCOORD2])); +			glClientActiveTextureARB(GL_TEXTURE0_ARB); +		}  	}  	if (data_mask & MAP_TEXCOORD1)  	{ -		glClientActiveTextureARB(GL_TEXTURE1_ARB); -		glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD1], (void*)(base + mOffsets[TYPE_TEXCOORD1])); -		glClientActiveTextureARB(GL_TEXTURE0_ARB); +		S32 loc = -1; +		if (shader) +		{ +			loc = shader->getAttribLocation(TYPE_TEXCOORD1); +		} + +		if (loc >= 0) +		{ +			glVertexAttribPointerARB(loc,2,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD1], (void*)(base + mOffsets[TYPE_TEXCOORD1])); +		} +		else if (!shader) +		{ +			glClientActiveTextureARB(GL_TEXTURE1_ARB); +			glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD1], (void*)(base + mOffsets[TYPE_TEXCOORD1])); +			glClientActiveTextureARB(GL_TEXTURE0_ARB); +		}  	}  	if (data_mask & MAP_BINORMAL)  	{ -		glClientActiveTextureARB(GL_TEXTURE2_ARB); -		glTexCoordPointer(3,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_BINORMAL], (void*)(base + mOffsets[TYPE_BINORMAL])); -		glClientActiveTextureARB(GL_TEXTURE0_ARB); +		S32 loc = -1; +		if (shader) +		{ +			loc = shader->getAttribLocation(TYPE_BINORMAL); +		} + +		if (loc >= 0) +		{ +			glVertexAttribPointerARB(loc, 3,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_BINORMAL], (void*)(base + mOffsets[TYPE_BINORMAL])); +		} +		else if (!shader) +		{ +			glClientActiveTextureARB(GL_TEXTURE2_ARB); +			glTexCoordPointer(3,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_BINORMAL], (void*)(base + mOffsets[TYPE_BINORMAL])); +			glClientActiveTextureARB(GL_TEXTURE0_ARB); +		}  	}  	if (data_mask & MAP_TEXCOORD0)  	{ -		glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD0], (void*)(base + mOffsets[TYPE_TEXCOORD0])); +		S32 loc = -1; +		if (shader) +		{ +			loc = shader->getAttribLocation(TYPE_TEXCOORD0); +		} + +		if (loc >= 0) +		{ +			glVertexAttribPointerARB(loc,2,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD0], (void*)(base + mOffsets[TYPE_TEXCOORD0])); +		} +		else if (!shader) +		{ +			glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD0], (void*)(base + mOffsets[TYPE_TEXCOORD0])); +		}  	}  	if (data_mask & MAP_COLOR)  	{ -		glColorPointer(4, GL_UNSIGNED_BYTE, LLVertexBuffer::sTypeSize[TYPE_COLOR], (void*)(base + mOffsets[TYPE_COLOR])); +		S32 loc = -1; +		if (shader) +		{ +			loc = shader->getAttribLocation(TYPE_COLOR); +		} + +		if (loc >= 0) +		{ +			glVertexAttribPointerARB(loc, 4, GL_UNSIGNED_BYTE, GL_TRUE, LLVertexBuffer::sTypeSize[TYPE_COLOR], (void*)(base + mOffsets[TYPE_COLOR])); +		} +		else if (!shader) +		{ +			glColorPointer(4, GL_UNSIGNED_BYTE, LLVertexBuffer::sTypeSize[TYPE_COLOR], (void*)(base + mOffsets[TYPE_COLOR])); +		} +	} +	if (data_mask & MAP_EMISSIVE) +	{ +		S32 loc = -1; +		if (shader) +		{ +			loc = shader->getAttribLocation(TYPE_EMISSIVE); +		} + +		if (loc >= 0) +		{ +			glVertexAttribPointerARB(loc, 1, GL_UNSIGNED_BYTE, GL_TRUE, LLVertexBuffer::sTypeSize[TYPE_EMISSIVE], (void*)(base + mOffsets[TYPE_EMISSIVE])); +		}  	} -	  	if (data_mask & MAP_WEIGHT)  	{ -		glVertexAttribPointerARB(1, 1, GL_FLOAT, FALSE, LLVertexBuffer::sTypeSize[TYPE_WEIGHT], (void*)(base + mOffsets[TYPE_WEIGHT])); +		S32 loc = -1; +		if (shader) +		{ +			loc = shader->getAttribLocation(TYPE_WEIGHT); +		} + +		if (loc < 0) +		{ //legacy behavior, some shaders have weight hardcoded to location 1 +			loc = 1; +		} +		 +		glVertexAttribPointerARB(loc, 1, GL_FLOAT, FALSE, LLVertexBuffer::sTypeSize[TYPE_WEIGHT], (void*)(base + mOffsets[TYPE_WEIGHT])); +		  	}  	if (data_mask & MAP_WEIGHT4 && sWeight4Loc != -1) @@ -1859,17 +2043,47 @@ void LLVertexBuffer::setupVertexBuffer(U32 data_mask) const  	if (data_mask & MAP_CLOTHWEIGHT)  	{ -		glVertexAttribPointerARB(4, 4, GL_FLOAT, TRUE,  LLVertexBuffer::sTypeSize[TYPE_CLOTHWEIGHT], (void*)(base + mOffsets[TYPE_CLOTHWEIGHT])); +		S32 loc = -1; +		if (shader) +		{ +			loc = shader->getAttribLocation(TYPE_CLOTHWEIGHT); +		} + +		if (loc < 0) +		{ //legacy behavior, some shaders have weight hardcoded to location 4 +			loc = 4; +		} +		glVertexAttribPointerARB(loc, 4, GL_FLOAT, TRUE,  LLVertexBuffer::sTypeSize[TYPE_CLOTHWEIGHT], (void*)(base + mOffsets[TYPE_CLOTHWEIGHT]));  	}  	if (data_mask & MAP_VERTEX)  	{ -		if (data_mask & MAP_TEXTURE_INDEX) +		S32 loc = -1; +		if (shader)  		{ -			glVertexPointer(4,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_VERTEX], (void*)(base + 0)); +			loc = shader->getAttribLocation(TYPE_VERTEX);  		} -		else + +		if (loc >= 0)  		{ -			glVertexPointer(3,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_VERTEX], (void*)(base + 0)); +			if (data_mask & MAP_TEXTURE_INDEX) +			{ +				glVertexAttribPointerARB(loc, 4,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_VERTEX], (void*)(base + 0)); +			} +			else +			{ +				glVertexAttribPointerARB(loc, 3,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_VERTEX], (void*)(base + 0)); +			} +		} +		else if (!shader) +		{ +			if (data_mask & MAP_TEXTURE_INDEX) +			{ +				glVertexPointer(4,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_VERTEX], (void*)(base + 0)); +			} +			else +			{ +				glVertexPointer(3,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_VERTEX], (void*)(base + 0)); +			}  		}  	} diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index cc5d11e1c2..3cccdf62ec 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -133,6 +133,12 @@ public:  	static S32 calcOffsets(const U32& typemask, S32* offsets, S32 num_vertices);		 +	//WARNING -- when updating these enums you MUST  +	// 1 - update LLVertexBuffer::sTypeSize +	// 2 - add a strider accessor +	// 3 - modify LLVertexBuffer::setupVertexBuffer +	// 4 - modify LLVertexBuffer::setupClientArray +	// 5 - modify LLViewerShaderMgr::mReservedAttribs  	enum {  		TYPE_VERTEX,  		TYPE_NORMAL, @@ -141,6 +147,7 @@ public:  		TYPE_TEXCOORD2,  		TYPE_TEXCOORD3,  		TYPE_COLOR, +		TYPE_EMISSIVE,  		// These use VertexAttribPointer and should possibly be made generic  		TYPE_BINORMAL,  		TYPE_WEIGHT, @@ -160,6 +167,7 @@ public:  		MAP_TEXCOORD2 = (1<<TYPE_TEXCOORD2),  		MAP_TEXCOORD3 = (1<<TYPE_TEXCOORD3),  		MAP_COLOR = (1<<TYPE_COLOR), +		MAP_EMISSIVE = (1<<TYPE_EMISSIVE),  		// These use VertexAttribPointer and should possibly be made generic  		MAP_BINORMAL = (1<<TYPE_BINORMAL),  		MAP_WEIGHT = (1<<TYPE_WEIGHT), @@ -218,10 +226,12 @@ public:  	bool getNormalStrider(LLStrider<LLVector3>& strider, S32 index=0, S32 count = -1, bool map_range = false);  	bool getBinormalStrider(LLStrider<LLVector3>& strider, S32 index=0, S32 count = -1, bool map_range = false);  	bool getColorStrider(LLStrider<LLColor4U>& strider, S32 index=0, S32 count = -1, bool map_range = false); +	bool getEmissiveStrider(LLStrider<U8>& strider, S32 index=0, S32 count = -1, bool map_range = false);  	bool getWeightStrider(LLStrider<F32>& strider, S32 index=0, S32 count = -1, bool map_range = false);  	bool getWeight4Strider(LLStrider<LLVector4>& strider, S32 index=0, S32 count = -1, bool map_range = false);  	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; }  	S32 getNumVerts() const					{ return mNumVerts; } diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml index ae72dee900..a76eb3cd37 100644 --- a/indra/newview/app_settings/logcontrol.xml +++ b/indra/newview/app_settings/logcontrol.xml @@ -43,7 +43,7 @@  					<key>tags</key>  						<array>  							<!-- sample entry for debugging a specific item	--> -<!--						<string>Voice</string>							--> +<!--						<string>Voice</string>		-->  						</array>  				</map>  			</array> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 9bb320d882..ed1e3c2057 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -7565,7 +7565,7 @@        <key>Type</key>        <string>Boolean</string>        <key>Value</key> -      <integer>0</integer> +      <integer>1</integer>      </map>    <key>RenderDebugNormalScale</key>    <map> diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl index d9f29ced4f..81b632e7fa 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl @@ -6,8 +6,7 @@   */ - -attribute vec4 weight;  //1 +attribute vec4 weight;  uniform vec4 matrixPalette[45]; diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl index 2796222c68..ec7359d565 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl @@ -5,7 +5,9 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec3 normal; +attribute vec2 texcoord0;  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  mat4 getSkinnedTransform(); @@ -13,31 +15,33 @@ void calcAtmospherics(vec3 inPositionEye);  void main()  { -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	vec4 pos;  	vec3 norm; +	vec4 pos_in = vec4(position.xyz, 1.0); +  	mat4 trans = getSkinnedTransform(); -	pos.x = dot(trans[0], gl_Vertex); -	pos.y = dot(trans[1], gl_Vertex); -	pos.z = dot(trans[2], gl_Vertex); +	pos.x = dot(trans[0], pos_in); +	pos.y = dot(trans[1], pos_in); +	pos.z = dot(trans[2], pos_in);  	pos.w = 1.0; -	norm.x = dot(trans[0].xyz, gl_Normal); -	norm.y = dot(trans[1].xyz, gl_Normal); -	norm.z = dot(trans[2].xyz, gl_Normal); +	norm.x = dot(trans[0].xyz, normal); +	norm.y = dot(trans[1].xyz, normal); +	norm.z = dot(trans[2].xyz, normal);  	norm = normalize(norm);  	gl_Position = gl_ProjectionMatrix * pos; -	//gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +	//gl_Position = gl_ModelViewProjectionMatrix * position;  	gl_FogFragCoord = length(pos.xyz);  	calcAtmospherics(pos.xyz); -	vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0,0,0,0)); +	vec4 color = calcLighting(pos.xyz, norm, vec4(1,1,1,1), vec4(0,0,0,0));  	gl_FrontColor = color;   } diff --git a/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl index 2eb814bd91..0b075feef5 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl @@ -6,6 +6,10 @@   */ +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec3 normal; +attribute vec2 texcoord0;  vec4 calcLightingSpecular(vec3 pos, vec3 norm, vec4 color, inout vec4 specularColor, vec4 baseCol);  void calcAtmospherics(vec3 inPositionEye); @@ -13,16 +17,17 @@ void calcAtmospherics(vec3 inPositionEye);  void main()  {  	//transform vertex -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	vec3 pos = (gl_ModelViewMatrix * vec4(position.xyz, 1.0)).xyz; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); -	vec3 pos = (gl_ModelViewMatrix * gl_Vertex).xyz; -	vec3 norm = normalize(gl_NormalMatrix * gl_Normal); +	 +	vec3 norm = normalize(gl_NormalMatrix * normal);  	calcAtmospherics(pos.xyz);  	vec4 specular = vec4(1.0); -	vec4 color = calcLightingSpecular(pos, norm, gl_Color, specular, vec4(0.0));	 +	vec4 color = calcLightingSpecular(pos, norm, diffuse_color, specular, vec4(0.0));	  	gl_FrontColor = color;  } diff --git a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl index 86b189b282..dcc891b16f 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl @@ -5,21 +5,23 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  mat4 getSkinnedTransform();  void main()  {  	vec4 pos; -		 +	vec4 pos_in = vec4(position, 1.0);  	mat4 trans = getSkinnedTransform(); -	pos.x = dot(trans[0], gl_Vertex); -	pos.y = dot(trans[1], gl_Vertex); -	pos.z = dot(trans[2], gl_Vertex); +	pos.x = dot(trans[0], pos_in); +	pos.y = dot(trans[1], pos_in); +	pos.z = dot(trans[2], pos_in);  	pos.w = 1.0; -	gl_FrontColor = gl_Color; -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_FrontColor = diffuse_color; +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	gl_Position = gl_ProjectionMatrix * pos;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl index ac3f7189c2..eeebae4464 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl @@ -6,6 +6,10 @@   */ +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  mat4 getObjectSkinnedTransform(); @@ -59,7 +63,7 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  void main()  { -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	vec4 pos;  	vec3 norm; @@ -67,9 +71,9 @@ void main()  	mat4 trans = getObjectSkinnedTransform();  	trans = gl_ModelViewMatrix * trans; -	pos = trans * gl_Vertex; +	pos = trans * vec4(position.xyz, 1.0); -	norm = gl_Vertex.xyz + gl_Normal.xyz; +	norm = position.xyz + normal.xyz;  	norm = normalize(( trans*vec4(norm, 1.0) ).xyz-pos.xyz);  	vec4 frag_pos = gl_ProjectionMatrix * pos; @@ -80,7 +84,7 @@ void main()  	calcAtmospherics(pos.xyz); -	vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a); +	vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);  	// Collect normal lights  	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].quadraticAttenuation, gl_LightSource[2].specular.a); @@ -90,17 +94,17 @@ void main()  	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].quadraticAttenuation, gl_LightSource[6].specular.a);  	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].quadraticAttenuation, gl_LightSource[7].specular.a); -	vary_pointlight_col = col.rgb*gl_Color.rgb; +	vary_pointlight_col = col.rgb*diffuse_color.rgb;  	col.rgb = vec3(0,0,0);  	// Add windlight lights  	col.rgb = atmosAmbient(vec3(0.)); -	vary_ambient = col.rgb*gl_Color.rgb; -	vary_directional = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a))); +	vary_ambient = col.rgb*diffuse_color.rgb; +	vary_directional = diffuse_color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-diffuse_color.a)*(1.0-diffuse_color.a))); -	col.rgb = min(col.rgb*gl_Color.rgb, 1.0); +	col.rgb = min(col.rgb*diffuse_color.rgb, 1.0);  	gl_FrontColor = col; diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl index 44cb78e914..3a17f6a709 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl @@ -5,7 +5,10 @@   * $/LicenseInfo$   */ - +attribute vec4 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  void calcAtmospherics(vec3 inPositionEye); @@ -62,22 +65,22 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  void main()  {  	//transform vertex -	vec4 vert = vec4(gl_Vertex.xyz, 1.0); -	vary_texture_index = gl_Vertex.w; -	gl_Position = gl_ModelViewProjectionMatrix * vert;  +	vec4 vert = vec4(position.xyz, 1.0); +	vary_texture_index = position.w; +	vec4 pos = (gl_ModelViewMatrix * vert); +	gl_Position = gl_ModelViewProjectionMatrix*vec4(position.xyz, 1.0); -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); -	vec4 pos = (gl_ModelViewMatrix * vert); -	vec3 norm = normalize(gl_NormalMatrix * gl_Normal); +	vec3 norm = normalize(gl_NormalMatrix * normal);  	float dp_directional_light = max(0.0, dot(norm, gl_LightSource[0].position.xyz));  	vary_position = pos.xyz + gl_LightSource[0].position.xyz * (1.0-dp_directional_light)*shadow_offset;  	calcAtmospherics(pos.xyz); -	//vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.)); -	vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a); +	//vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.)); +	vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);  	// Collect normal lights  	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].quadraticAttenuation, gl_LightSource[2].specular.a); @@ -87,7 +90,7 @@ void main()  	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].quadraticAttenuation, gl_LightSource[6].specular.a);  	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].quadraticAttenuation, gl_LightSource[7].specular.a); -	vary_pointlight_col = col.rgb*gl_Color.rgb; +	vary_pointlight_col = col.rgb*diffuse_color.rgb;  	col.rgb = vec3(0,0,0); @@ -96,10 +99,10 @@ void main()  	vary_light = gl_LightSource[0].position.xyz; -	vary_ambient = col.rgb*gl_Color.rgb; -	vary_directional.rgb = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a))); +	vary_ambient = col.rgb*diffuse_color.rgb; +	vary_directional.rgb = diffuse_color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-diffuse_color.a)*(1.0-diffuse_color.a))); -	col.rgb = col.rgb*gl_Color.rgb; +	col.rgb = col.rgb*diffuse_color.rgb;  	gl_FrontColor = col; diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl index c7a4f86727..df61785aa1 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl @@ -5,21 +5,23 @@   * $License$   */ - +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  mat4 getObjectSkinnedTransform();  void main()  {  	//transform vertex -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1);  	mat4 mat = getObjectSkinnedTransform();  	mat = gl_ModelViewMatrix * mat; -	vec3 pos = (mat*gl_Vertex).xyz; +	vec3 pos = (mat*vec4(position.xyz, 1.0)).xyz; -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  	vec4 p = gl_ProjectionMatrix * vec4(pos, 1.0);  	p.z = max(p.z, -p.w+0.01); diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl index 68e4055cf2..842931ec17 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl @@ -5,7 +5,10 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  mat4 getSkinnedTransform(); @@ -59,20 +62,21 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  void main()  { -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	vec4 pos;  	vec3 norm;  	mat4 trans = getSkinnedTransform(); -	pos.x = dot(trans[0], gl_Vertex); -	pos.y = dot(trans[1], gl_Vertex); -	pos.z = dot(trans[2], gl_Vertex); +	vec4 pos_in = vec4(position.xyz, 1.0); +	pos.x = dot(trans[0], pos_in); +	pos.y = dot(trans[1], pos_in); +	pos.z = dot(trans[2], pos_in);  	pos.w = 1.0; -	norm.x = dot(trans[0].xyz, gl_Normal); -	norm.y = dot(trans[1].xyz, gl_Normal); -	norm.z = dot(trans[2].xyz, gl_Normal); +	norm.x = dot(trans[0].xyz, normal); +	norm.y = dot(trans[1].xyz, normal); +	norm.z = dot(trans[2].xyz, normal);  	norm = normalize(norm);  	vec4 frag_pos = gl_ProjectionMatrix * pos; @@ -82,9 +86,9 @@ void main()  	calcAtmospherics(pos.xyz); -	//vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.)); +	//vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.)); -	vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a); +	vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);  	// Collect normal lights  	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].quadraticAttenuation, gl_LightSource[2].specular.a); @@ -94,17 +98,17 @@ void main()  	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].quadraticAttenuation, gl_LightSource[6].specular.a);  	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].quadraticAttenuation, gl_LightSource[7].specular.a); -	vary_pointlight_col = col.rgb*gl_Color.rgb; +	vary_pointlight_col = col.rgb*diffuse_color.rgb;  	col.rgb = vec3(0,0,0);  	// Add windlight lights  	col.rgb = atmosAmbient(vec3(0.)); -	vary_ambient = col.rgb*gl_Color.rgb; -	vary_directional = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a))); +	vary_ambient = col.rgb*diffuse_color.rgb; +	vary_directional = diffuse_color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-diffuse_color.a)*(1.0-diffuse_color.a))); -	col.rgb = min(col.rgb*gl_Color.rgb, 1.0); +	col.rgb = min(col.rgb*diffuse_color.rgb, 1.0);  	gl_FrontColor = col; diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl index 7bc78fe407..bdea3d2b57 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl @@ -6,16 +6,20 @@   */ +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  varying vec3 vary_normal;  void main()  {  	//transform vertex -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;  -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0);  +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); -	vary_normal = normalize(gl_NormalMatrix * gl_Normal); +	vary_normal = normalize(gl_NormalMatrix * normal); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl index f177fcd8f1..cf6fc1c0ed 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl @@ -9,26 +9,31 @@  mat4 getSkinnedTransform(); -attribute vec4 weight; +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0; +  varying vec4 post_pos;  void main()  { -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	vec4 pos;  	vec3 norm; +	vec4 pos_in = vec4(position.xyz, 1.0);  	mat4 trans = getSkinnedTransform(); -	pos.x = dot(trans[0], gl_Vertex); -	pos.y = dot(trans[1], gl_Vertex); -	pos.z = dot(trans[2], gl_Vertex); +	pos.x = dot(trans[0], pos_in); +	pos.y = dot(trans[1], pos_in); +	pos.z = dot(trans[2], pos_in);  	pos.w = 1.0; -	norm.x = dot(trans[0].xyz, gl_Normal); -	norm.y = dot(trans[1].xyz, gl_Normal); -	norm.z = dot(trans[2].xyz, gl_Normal); +	norm.x = dot(trans[0].xyz, normal); +	norm.y = dot(trans[1].xyz, normal); +	norm.z = dot(trans[2].xyz, normal);  	norm = normalize(norm);  	pos = gl_ProjectionMatrix * pos; @@ -36,7 +41,7 @@ void main()  	gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl index 7eac11287a..e66f8c8483 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl @@ -5,7 +5,10 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec3 normal; +attribute vec2 texcoord0;  mat4 getSkinnedTransform(); @@ -15,28 +18,28 @@ varying vec3 vary_normal;  void main()  { -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	vec4 pos;  	vec3 norm; +	vec4 pos_in = vec4(position.xyz, 1.0);  	mat4 trans = getSkinnedTransform(); -	pos.x = dot(trans[0], gl_Vertex); -	pos.y = dot(trans[1], gl_Vertex); -	pos.z = dot(trans[2], gl_Vertex); +	pos.x = dot(trans[0], pos_in); +	pos.y = dot(trans[1], pos_in); +	pos.z = dot(trans[2], pos_in);  	pos.w = 1.0; -	norm.x = dot(trans[0].xyz, gl_Normal); -	norm.y = dot(trans[1].xyz, gl_Normal); -	norm.z = dot(trans[2].xyz, gl_Normal); +	norm.x = dot(trans[0].xyz, normal); +	norm.y = dot(trans[1].xyz, normal); +	norm.z = dot(trans[2].xyz, normal);  	norm = normalize(norm);  	vary_normal = norm;  	gl_Position = gl_ProjectionMatrix * pos; -	//gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;	 -	 -	gl_FrontColor = gl_Color; +		 +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl index 862f809de5..016b5e1008 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl @@ -5,7 +5,7 @@   * $/LicenseInfo$   */ - +attribute vec3 position;  varying vec2 vary_fragcoord;  uniform vec2 screen_res; @@ -13,7 +13,7 @@ uniform vec2 screen_res;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos;   	vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl index dc69519a85..93e00fe523 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl @@ -5,7 +5,11 @@   * $License$   */ - +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec3 normal; +attribute vec2 texcoord0; +attribute vec2 texcoord2;  varying vec3 vary_mat0;  varying vec3 vary_mat1; @@ -15,17 +19,17 @@ mat4 getObjectSkinnedTransform();  void main()  { -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1);  	mat4 mat = getObjectSkinnedTransform();  	mat = gl_ModelViewMatrix * mat; -	vec3 pos = (mat*gl_Vertex).xyz; +	vec3 pos = (mat*vec4(position.xyz, 1.0)).xyz; -	vec3 n = normalize((mat * vec4(gl_Normal.xyz+gl_Vertex.xyz, 1.0)).xyz-pos.xyz); -	vec3 b = normalize((mat * vec4(gl_MultiTexCoord2.xyz+gl_Vertex.xyz, 1.0)).xyz-pos.xyz); +	vec3 n = normalize((mat * vec4(normal.xyz+position.xyz, 1.0)).xyz-pos.xyz); +	vec3 b = normalize((mat * vec4(vec4(texcoord2,0,1).xyz+position.xyz, 1.0)).xyz-pos.xyz);  	vec3 t = cross(b, n);  	vary_mat0 = vec3(t.x, b.x, n.x); @@ -33,5 +37,5 @@ void main()  	vary_mat2 = vec3(t.z, b.z, n.z);  	gl_Position = gl_ProjectionMatrix*vec4(pos, 1.0); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl index 5b6726488b..3c28776045 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl @@ -5,7 +5,11 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec3 normal; +attribute vec2 texcoord0; +attribute vec2 texcoord2;  varying vec3 vary_mat0;  varying vec3 vary_mat1; @@ -14,16 +18,16 @@ varying vec3 vary_mat2;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0);  +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); -	vec3 n = normalize(gl_NormalMatrix * gl_Normal); -	vec3 b = normalize(gl_NormalMatrix * gl_MultiTexCoord2.xyz); +	vec3 n = normalize(gl_NormalMatrix * normal); +	vec3 b = normalize(gl_NormalMatrix * vec4(texcoord2,0,1).xyz);  	vec3 t = cross(b, n);  	vary_mat0 = vec3(t.x, b.x, n.x);  	vary_mat1 = vec3(t.y, b.y, n.y);  	vary_mat2 = vec3(t.z, b.z, n.z); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl index 3eac63076c..9ba5e97a95 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl @@ -5,7 +5,8 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec2 texcoord0;  //////////////////////////////////////////////////////////////////////////  // The vertex shader for creating the atmospheric sky @@ -41,12 +42,12 @@ void main()  {  	// World / view / projection -	gl_Position = ftransform(); +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	// Get relative position -	vec3 P = gl_Vertex.xyz - camPosLocal.xyz + vec3(0,50,0); +	vec3 P = position.xyz - camPosLocal.xyz + vec3(0,50,0);  	// Set altitude  	if (P.y > 0.) @@ -142,7 +143,7 @@ void main()  	// Texture coords -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	gl_TexCoord[0].xy -= 0.5;  	gl_TexCoord[0].xy /= cloud_scale.x;  	gl_TexCoord[0].xy += 0.5; diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl index 2c4caea109..fadbe5b9ef 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl @@ -7,27 +7,32 @@ +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec3 normal; +attribute vec2 texcoord0; +  varying vec3 vary_normal;  mat4 getObjectSkinnedTransform();  void main()  { -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1);  	mat4 mat = getObjectSkinnedTransform();  	mat = gl_ModelViewMatrix * mat; -	vec3 pos = (mat*gl_Vertex).xyz; +	vec3 pos = (mat*vec4(position.xyz, 1.0)).xyz; -	vec4 norm = gl_Vertex; -	norm.xyz += gl_Normal.xyz; +	vec4 norm = vec4(position.xyz, 1.0); +	norm.xyz += normal.xyz;  	norm.xyz = (mat*norm).xyz;  	norm.xyz = normalize(norm.xyz-pos.xyz);  	vary_normal = norm.xyz; -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  	gl_Position = gl_ProjectionMatrix*vec4(pos, 1.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl index b56d1493c3..e424737702 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl @@ -6,6 +6,10 @@   */ +attribute vec4 position; +attribute vec4 diffuse_color; +attribute vec3 normal; +attribute vec2 texcoord0;  varying vec3 vary_normal;  varying float vary_texture_index; @@ -13,11 +17,11 @@ varying float vary_texture_index;  void main()  {  	//transform vertex -	gl_Position = gl_ModelViewProjectionMatrix * vec4(gl_Vertex.xyz, 1.0);  -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0);  +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); -	vary_texture_index = gl_Vertex.w; -	vary_normal = normalize(gl_NormalMatrix * gl_Normal); +	vary_texture_index = position.w; +	vary_normal = normalize(gl_NormalMatrix * normal); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl index 2eed044b7c..3e5fc7a36b 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl @@ -6,6 +6,9 @@   */ +attribute vec4 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  void calcAtmospherics(vec3 inPositionEye); @@ -19,18 +22,17 @@ varying float vary_texture_index;  void main()  {  	//transform vertex -	vec4 vert = vec4(gl_Vertex.xyz, 1.0); -	vary_texture_index = gl_Vertex.w; +	vec4 vert = vec4(position.xyz, 1.0); +	vec4 pos = (gl_ModelViewMatrix * vert); +	vary_texture_index = position.w; -	gl_Position = gl_ModelViewProjectionMatrix*vert;  +	gl_Position = gl_ModelViewProjectionMatrix*vec4(position.xyz, 1.0); -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); -	vec4 pos = (gl_ModelViewMatrix * vert); -				  	calcAtmospherics(pos.xyz); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  	gl_FogFragCoord = pos.z;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/giV.glsl b/indra/newview/app_settings/shaders/class1/deferred/giV.glsl index e86f2896da..d97d7ea82d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/giV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/giV.glsl @@ -5,6 +5,9 @@   * $/LicenseInfo$   */ +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  varying vec2 vary_fragcoord; @@ -14,11 +17,12 @@ uniform vec2 screen_res;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos;  +	  	vary_fragcoord = (pos.xy * 0.5 + 0.5)*screen_res;	 -	vec4 tex = gl_MultiTexCoord0; +	vec4 tex = vec4(texcoord0,0,1);  	tex.w = 1.0; -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl index 723777bd3a..cb47f62bbf 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl @@ -5,13 +5,15 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0);  +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl index 4baf1fc65a..6a53644723 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl @@ -5,8 +5,9 @@   * $/LicenseInfo$   */ - - +  +attribute vec3 position; +attribute vec4 diffuse_color;  varying vec2 vary_fragcoord; @@ -15,9 +16,10 @@ uniform vec2 screen_res;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos; +	  	vary_fragcoord = (pos.xy * 0.5 + 0.5)*screen_res;	 -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl index 434fb6f534..7db577c07a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl @@ -6,15 +6,17 @@   */ +attribute vec3 position; +attribute vec4 diffuse_color;  varying vec4 vary_fragcoord;  void main()  {  	//transform vertex -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0);  	vary_fragcoord = pos;  	gl_Position = pos; -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl index c510d8ad77..ac3170d16d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl @@ -5,7 +5,9 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  varying vec4 vary_light;  varying vec4 vary_fragcoord; @@ -13,15 +15,15 @@ varying vec4 vary_fragcoord;  void main()  {  	//transform vertex -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0);  	vary_fragcoord = pos; -	vec4 tex = gl_MultiTexCoord0; +	vec4 tex = vec4(texcoord0,0,1);  	tex.w = 1.0; -	vary_light = gl_MultiTexCoord0; +	vary_light = vec4(texcoord0,0,1);  	gl_Position = pos; -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl index 876f65ee3a..30dbe3f75e 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl @@ -5,7 +5,7 @@   * $/LicenseInfo$   */ - +attribute vec3 position;  varying vec2 vary_fragcoord;  uniform vec2 screen_res; @@ -13,7 +13,7 @@ uniform vec2 screen_res;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos;	  	vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl index eebe930666..38525044ba 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl @@ -5,6 +5,7 @@   * $/LicenseInfo$   */ +attribute vec3 position;  varying vec2 vary_fragcoord; @@ -13,7 +14,7 @@ uniform vec2 screen_res;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos; 	  	vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl index 58e9bcec58..6bbbfdd8ee 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl @@ -5,19 +5,21 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  varying vec4 post_pos;  void main()  {  	//transform vertex -	vec4 pos = gl_ModelViewProjectionMatrix*gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix*vec4(position.xyz, 1.0);  	post_pos = pos;  	gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w); -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; -	gl_FrontColor = gl_Color; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl index d40c2d9f78..7a8ac14f5e 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl @@ -5,14 +5,14 @@   * $/LicenseInfo$   */ - +attribute vec3 position;  varying vec4 post_pos;  void main()  {  	//transform vertex -	vec4 pos = gl_ModelViewProjectionMatrix*gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix*vec4(position.xyz, 1.0);  	post_pos = pos; diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl index 1ea00f723a..8dfb466e88 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl @@ -5,7 +5,8 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec2 texcoord0;  // SKY ////////////////////////////////////////////////////////////////////////  // The vertex shader for creating the atmospheric sky @@ -39,12 +40,12 @@ void main()  {  	// World / view / projection -	gl_Position = ftransform(); -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	// Get relative position -	vec3 P = gl_Vertex.xyz - camPosLocal.xyz + vec3(0,50,0); -	//vec3 P = gl_Vertex.xyz + vec3(0,50,0); +	vec3 P = position.xyz - camPosLocal.xyz + vec3(0,50,0); +	//vec3 P = position.xyz + vec3(0,50,0);  	// Set altitude  	if (P.y > 0.) diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index d327216a0c..3ba5ee5bd2 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -45,7 +45,7 @@ uniform vec3 env_mat[3];  //uniform vec4 shadow_clip;  uniform mat3 ssao_effect_mat; -varying vec4 vary_light; +uniform vec3 sun_dir;  varying vec2 vary_fragcoord;  vec3 vary_PositionEye; @@ -265,7 +265,7 @@ void main()  	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm  	//vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0).xyz; -	float da = max(dot(norm.xyz, vary_light.xyz), 0.0); +	float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);  	vec4 diffuse = texture2DRect(diffuseRect, tc);  	vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); @@ -286,7 +286,7 @@ void main()  			// the old infinite-sky shiny reflection  			//  			vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); -			float sa = dot(refnormpersp, vary_light.xyz); +			float sa = dot(refnormpersp, sun_dir.xyz);  			vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a;  			// add the two types of shiny together diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl index 745cc01992..5b3f655edf 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl @@ -6,21 +6,16 @@   */ +attribute vec3 position;  uniform vec2 screen_res; -varying vec4 vary_light;  varying vec2 vary_fragcoord;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	 -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; -	vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos;  -	vec4 tex = gl_MultiTexCoord0; -	tex.w = 1.0; -	 -	vary_light = gl_MultiTexCoord0; +	vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl index c43125dad9..7cdfe445df 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl @@ -6,12 +6,14 @@   */ - +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  void main()  {  	//transform vertex -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;  -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; -	gl_FrontColor = gl_Color; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0);  +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl index 814deb3677..65fa288e88 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl @@ -5,7 +5,10 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  varying vec4 vary_light;  varying vec2 vary_fragcoord; @@ -15,13 +18,14 @@ uniform vec2 screen_res;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos;  +	  	vary_fragcoord = (pos.xy * 0.5 + 0.5)*screen_res;	 -	vec4 tex = gl_MultiTexCoord0; +	vec4 tex = vec4(texcoord0,0,1);  	tex.w = 1.0; -	vary_light = gl_MultiTexCoord0; +	vary_light = vec4(texcoord0,0,1); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl index 3038fd2966..33b379d70c 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl @@ -5,7 +5,11 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0; +attribute vec2 texcoord1;  varying vec3 vary_normal; @@ -26,14 +30,14 @@ vec4 texgen_object(vec4  vpos, vec4 tc, mat4 mat, vec4 tp0, vec4 tp1)  void main()  {  	//transform vertex -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); -	vary_normal = normalize(gl_NormalMatrix * gl_Normal); +	vary_normal = normalize(gl_NormalMatrix * normal);  	// Transform and pass tex coords - 	gl_TexCoord[0].xy = texgen_object(gl_Vertex, gl_MultiTexCoord0, gl_TextureMatrix[0], gl_ObjectPlaneS[0], gl_ObjectPlaneT[0]).xy; + 	gl_TexCoord[0].xy = texgen_object(vec4(position, 1.0), vec4(texcoord0,0,1), gl_TextureMatrix[0], gl_ObjectPlaneS[0], gl_ObjectPlaneT[0]).xy; -	vec4 t = gl_MultiTexCoord1; +	vec4 t = vec4(texcoord1,0,1);  	gl_TexCoord[0].zw = t.xy;  	gl_TexCoord[1].xy = t.xy-vec2(2.0, 0.0); diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl index a9bef4292d..07e56e84db 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl @@ -6,16 +6,20 @@   */ +attribute vec3 position; +attribute vec3 normal; +attribute vec2 texcoord0; +  varying vec3 vary_normal;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0);  +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); -	vary_normal = normalize(gl_NormalMatrix * gl_Normal); +	vary_normal = normalize(gl_NormalMatrix * normal); -	gl_FrontColor = gl_Color; +	gl_FrontColor = vec4(1,1,1,1);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl index 5397290b11..b5869e6cb2 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl @@ -6,6 +6,8 @@   */ +attribute vec3 position; +  void calcAtmospherics(vec3 inPositionEye); @@ -29,25 +31,25 @@ float wave(vec2 v, float t, float f, vec2 d, float s)  void main()  {  	//transform vertex -	vec4 position = gl_Vertex; +	vec4 pos = vec4(position.xyz, 1.0);  	mat4 modelViewProj = gl_ModelViewProjectionMatrix;  	vec4 oPosition;  	//get view vector  	vec3 oEyeVec; -	oEyeVec.xyz = position.xyz-eyeVec; +	oEyeVec.xyz = pos.xyz-eyeVec;  	float d = length(oEyeVec.xy);  	float ld = min(d, 2560.0); -	position.xy = eyeVec.xy + oEyeVec.xy/d*ld; +	pos.xy = eyeVec.xy + oEyeVec.xy/d*ld;  	view.xyz = oEyeVec;  	d = clamp(ld/1536.0-0.5, 0.0, 1.0);	  	d *= d; -	oPosition = position; +	oPosition = vec4(position, 1.0);  	oPosition.z = mix(oPosition.z, max(eyeVec.z*0.75, 0.0), d);  	vary_position = gl_ModelViewMatrix * oPosition;  	oPosition = modelViewProj * oPosition; @@ -55,17 +57,16 @@ void main()  	refCoord.xyz = oPosition.xyz + vec3(0,0,0.2);  	//get wave position parameter (create sweeping horizontal waves) -	vec3 v = position.xyz; +	vec3 v = pos.xyz;  	v.x += (cos(v.x*0.08/*+time*0.01*/)+sin(v.y*0.02))*6.0;  	//push position for further horizon effect. -	position.xyz = oEyeVec.xyz*(waterHeight/oEyeVec.z); -	position.w = 1.0; -	position = position*gl_ModelViewMatrix; -	 -	calcAtmospherics((gl_ModelViewMatrix * gl_Vertex).xyz); -	 +	pos.xyz = oEyeVec.xyz*(waterHeight/oEyeVec.z); +	pos.w = 1.0; +	pos = gl_ModelViewMatrix*pos; +	calcAtmospherics(pos.xyz); +		  	//pass wave parameters to pixel shader  	vec2 bigWave =  (v.xy) * vec2(0.04,0.04)  + d1 * time * 0.055;  	//get two normal map (detail map) texture coordinates diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl index 32f5f5f236..1ec0836dcc 100644 --- a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl +++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl @@ -19,7 +19,6 @@ uniform float warmthAmount;  void main()  {  	vec4 col = texture2DRect(diffuseMap, gl_TexCoord[0].xy);	 -  	/// CALCULATING LUMINANCE (Using NTSC lum weights)  	/// http://en.wikipedia.org/wiki/Luma_%28video%29  	float lum = smoothstep(minLuminance, minLuminance+1.0, dot(col.rgb, lumWeights ) ); @@ -27,4 +26,5 @@ void main()  	gl_FragColor.rgb = col.rgb;   	gl_FragColor.a = max(col.a, mix(lum, warmth, warmthAmount) * maxExtractAlpha); +	  } diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl index 76736fed53..b8881e0b19 100644 --- a/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl +++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl @@ -5,11 +5,13 @@   * $/LicenseInfo$   */ +attribute vec3 position; +attribute vec2 texcoord0;  void main()   { -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position, 1.0); -	gl_TexCoord[0].xy = gl_MultiTexCoord0.xy; +	gl_TexCoord[0].xy = texcoord0;  } diff --git a/indra/newview/app_settings/shaders/class1/effects/glowV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowV.glsl index 9bb41626ae..a05449a77c 100644 --- a/indra/newview/app_settings/shaders/class1/effects/glowV.glsl +++ b/indra/newview/app_settings/shaders/class1/effects/glowV.glsl @@ -5,20 +5,21 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec2 texcoord0;  uniform vec2 glowDelta;  void main()   { -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position, 1.0); -	gl_TexCoord[0].xy = gl_MultiTexCoord0.xy + glowDelta*(-3.5); -	gl_TexCoord[1].xy = gl_MultiTexCoord0.xy + glowDelta*(-2.5); -	gl_TexCoord[2].xy = gl_MultiTexCoord0.xy + glowDelta*(-1.5); -	gl_TexCoord[3].xy = gl_MultiTexCoord0.xy + glowDelta*(-0.5); -	gl_TexCoord[0].zw = gl_MultiTexCoord0.xy + glowDelta*(0.5); -	gl_TexCoord[1].zw = gl_MultiTexCoord0.xy + glowDelta*(1.5); -	gl_TexCoord[2].zw = gl_MultiTexCoord0.xy + glowDelta*(2.5); -	gl_TexCoord[3].zw = gl_MultiTexCoord0.xy + glowDelta*(3.5); +	gl_TexCoord[0].xy = texcoord0 + glowDelta*(-3.5); +	gl_TexCoord[1].xy = texcoord0 + glowDelta*(-2.5); +	gl_TexCoord[2].xy = texcoord0 + glowDelta*(-1.5); +	gl_TexCoord[3].xy = texcoord0 + glowDelta*(-0.5); +	gl_TexCoord[0].zw = texcoord0 + glowDelta*(0.5); +	gl_TexCoord[1].zw = texcoord0 + glowDelta*(1.5); +	gl_TexCoord[2].zw = texcoord0 + glowDelta*(2.5); +	gl_TexCoord[3].zw = texcoord0 + glowDelta*(3.5);  } diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl index 8af981915b..d0d8aed67e 100644 --- a/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl @@ -5,6 +5,13 @@   * $/LicenseInfo$   */ +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0; +attribute vec2 texcoord1; +attribute vec2 texcoord2; +attribute vec2 texcoord3;  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); @@ -26,17 +33,17 @@ vec4 texgen_object(vec4  vpos, vec4 tc, mat4 mat, vec4 tp0, vec4 tp1)  void main()  {  	//transform vertex -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); -	vec4 pos = gl_ModelViewMatrix * gl_Vertex; -	vec3 norm = normalize(gl_NormalMatrix * gl_Normal); +	vec4 pos = gl_ModelViewMatrix * position; +	vec3 norm = normalize(gl_NormalMatrix * normal); -	vec4 color = calcLighting(pos.xyz, norm, vec4(1,1,1,1), gl_Color); +	vec4 color = calcLighting(pos.xyz, norm, vec4(1,1,1,1), diffuse_color);  	gl_FrontColor = color; -	gl_TexCoord[0] = texgen_object(gl_Vertex,gl_MultiTexCoord0,gl_TextureMatrix[0],gl_ObjectPlaneS[0],gl_ObjectPlaneT[0]); -	gl_TexCoord[1] = gl_TextureMatrix[1]*gl_MultiTexCoord1; -	gl_TexCoord[2] = texgen_object(gl_Vertex,gl_MultiTexCoord2,gl_TextureMatrix[2],gl_ObjectPlaneS[2],gl_ObjectPlaneT[2]); -	gl_TexCoord[3] = gl_TextureMatrix[3]*gl_MultiTexCoord3; +	gl_TexCoord[0] = texgen_object(vec4(position.xyz, 1.0),vec4(texcoord0,0,1),gl_TextureMatrix[0],gl_ObjectPlaneS[0],gl_ObjectPlaneT[0]); +	gl_TexCoord[1] = gl_TextureMatrix[1]*vec4(texcoord1,0,1); +	gl_TexCoord[2] = texgen_object(vec4(position.xyz, 1.0),vec4(texcoord2,0,1),gl_TextureMatrix[2],gl_ObjectPlaneS[2],gl_ObjectPlaneT[2]); +	gl_TexCoord[3] = gl_TextureMatrix[3]*vec4(texcoord3,0,1);  } diff --git a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl index 831d6a761c..92d4759fe8 100644 --- a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl @@ -6,6 +6,7 @@   */ +attribute vec3 position;  void calcAtmospherics(vec3 inPositionEye); @@ -27,7 +28,6 @@ float wave(vec2 v, float t, float f, vec2 d, float s)  void main()  {  	//transform vertex -	vec4 position = gl_Vertex;  	mat4 modelViewProj = gl_ModelViewProjectionMatrix;  	vec4 oPosition; @@ -45,7 +45,7 @@ void main()  	d = clamp(ld/1536.0-0.5, 0.0, 1.0);	  	d *= d; -	oPosition = position; +	oPosition = vec4(position, 1.0);  	oPosition.z = mix(oPosition.z, max(eyeVec.z*0.75, 0.0), d);  	oPosition = modelViewProj * oPosition;  	refCoord.xyz = oPosition.xyz + vec3(0,0,0.2); @@ -55,11 +55,12 @@ void main()  	v.x += (cos(v.x*0.08/*+time*0.01*/)+sin(v.y*0.02))*6.0;  	//push position for further horizon effect. -	position.xyz = oEyeVec.xyz*(waterHeight/oEyeVec.z); -	position.w = 1.0; -	position = position*gl_ModelViewMatrix; +	vec4 pos; +	pos.xyz = oEyeVec.xyz*(waterHeight/oEyeVec.z); +	pos.w = 1.0; +	pos = gl_ModelViewMatrix*pos; -	calcAtmospherics((gl_ModelViewMatrix * gl_Vertex).xyz); +	calcAtmospherics(pos.xyz);  	//pass wave parameters to pixel shader diff --git a/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl b/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl index 04bfff22c1..22095bc611 100644 --- a/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl @@ -5,12 +5,15 @@   * $/LicenseInfo$   */ +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  void main()  { -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; -	gl_TexCoord[0] = gl_MultiTexCoord0; -	gl_FrontColor = gl_Color; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_TexCoord[0] = vec4(texcoord0,0,1); +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl index ce183ec154..46be1c45d3 100644 --- a/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl @@ -5,11 +5,14 @@   * $/LicenseInfo$   */ +attribute vec3 position; +attribute vec2 texcoord0; +attribute vec2 texcoord1;  void main()  { -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; -	gl_TexCoord[0] = gl_MultiTexCoord0; -	gl_TexCoord[1] = gl_MultiTexCoord1; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_TexCoord[0] = vec4(texcoord0,0,1); +	gl_TexCoord[1] = vec4(texcoord1,0,1);  } diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl index f6c6d945de..a0cbdaafb8 100644 --- a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl @@ -6,10 +6,10 @@   */ - +uniform vec4 highlight_color;  uniform sampler2D diffuseMap;  void main()   { -	gl_FragColor = gl_Color*texture2D(diffuseMap, gl_TexCoord[0].xy); +	gl_FragColor = highlight_color*texture2D(diffuseMap, gl_TexCoord[0].xy);  } diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl index f114f766bf..0547c44093 100644 --- a/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl @@ -5,23 +5,13 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec2 texcoord0;  void main()  {  	//transform vertex -	gl_Position = ftransform(); -	vec3 pos = (gl_ModelViewMatrix * gl_Vertex).xyz; -	pos = normalize(pos); -	float d = dot(pos, normalize(gl_NormalMatrix * gl_Normal)); -	d *= d; -	d = 1.0 - d; -	d *= d; -		 -	d = min(d, gl_Color.a*2.0); -			 -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; -	gl_FrontColor.rgb = gl_Color.rgb; -	gl_FrontColor.a = max(d, gl_Color.a); +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1);  } diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl index 5a5d0ec506..9c528750eb 100644 --- a/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl @@ -5,8 +5,10 @@   * $/LicenseInfo$   */ +attribute vec3 position; +  void main()  { -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0);  } diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl index 8401208e28..18c8e394c6 100644 --- a/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl @@ -5,12 +5,14 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  void main()  { -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; -	gl_FrontColor = gl_Color; -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_FrontColor = diffuse_color; +	gl_TexCoord[0] = vec4(texcoord0,0,1);  } diff --git a/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl b/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl index f685b112b4..dde4e87c63 100644 --- a/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl @@ -6,11 +6,14 @@   */ +attribute vec3 position; +attribute vec2 texcoord0; +attribute vec2 texcoord1;  void main()  { -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; -	gl_TexCoord[0] = gl_MultiTexCoord0; -	gl_TexCoord[1] = gl_MultiTexCoord1; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_TexCoord[0] = vec4(texcoord0,0,1); +	gl_TexCoord[1] = vec4(texcoord1,0,1);  } diff --git a/indra/newview/app_settings/shaders/class1/interface/uiV.glsl b/indra/newview/app_settings/shaders/class1/interface/uiV.glsl index 9ca6cae5c5..ebf2361da4 100644 --- a/indra/newview/app_settings/shaders/class1/interface/uiV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/uiV.glsl @@ -6,11 +6,15 @@   */ +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0; +  void main()  { -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; -	gl_TexCoord[0] = gl_MultiTexCoord0; -	gl_FrontColor = gl_Color; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position, 1); +	gl_TexCoord[0] = vec4(texcoord0,0,1); +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl b/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl index 056d1a9582..438a9bec85 100644 --- a/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl @@ -6,11 +6,16 @@   */ +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0; +attribute vec2 texcoord1; +  void main()  {  	//transform vertex -	gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex; -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; -	gl_TexCoord[1] = gl_TextureMatrix[1] * gl_MultiTexCoord1; -	gl_FrontColor = gl_Color; +	gl_Position = gl_ModelViewProjectionMatrix*vec4(position.xyz, 1.0); +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); +	gl_TexCoord[1] = gl_TextureMatrix[1] * vec4(texcoord1,0,1); +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl index 5283e80407..5ed2b38f42 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl @@ -6,6 +6,10 @@   */ +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  void calcAtmospherics(vec3 inPositionEye);  mat4 getObjectSkinnedTransform(); @@ -15,21 +19,21 @@ void main()  	mat4 mat = getObjectSkinnedTransform();  	mat = gl_ModelViewMatrix * mat; -	vec3 pos = (mat*gl_Vertex).xyz; +	vec3 pos = (mat*vec4(position.xyz, 1.0)).xyz; -	vec4 norm = gl_Vertex; -	norm.xyz += gl_Normal.xyz; +	vec4 norm = vec4(position.xyz, 1.0); +	norm.xyz += normal.xyz;  	norm.xyz = (mat*norm).xyz;  	norm.xyz = normalize(norm.xyz-pos.xyz);  	vec3 ref = reflect(pos.xyz, -norm.xyz); -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1);  	gl_TexCoord[1] = gl_TextureMatrix[1]*vec4(ref,1.0);  	calcAtmospherics(pos.xyz); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  	gl_Position = gl_ProjectionMatrix*vec4(pos, 1.0); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl index 31e0f0a429..4063294c51 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl @@ -6,6 +6,10 @@   */ +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec3 normal; +attribute vec2 texcoord0;  void calcAtmospherics(vec3 inPositionEye); @@ -14,18 +18,18 @@ uniform vec4 origin;  void main()  {  	//transform vertex -	gl_Position = ftransform(); +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); -	vec4 pos = (gl_ModelViewMatrix * gl_Vertex); -	vec3 norm = normalize(gl_NormalMatrix * gl_Normal); +	vec3 norm = normalize(gl_NormalMatrix * normal);  	vec3 ref = reflect(pos.xyz, -norm); -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1);  	gl_TexCoord[1] = gl_TextureMatrix[1]*vec4(ref,1.0); +	vec4 pos = (gl_ModelViewMatrix * vec4(position.xyz, 1.0));  	calcAtmospherics(pos.xyz); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  	gl_FogFragCoord = pos.z;  } diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl index 1db79791de..316c93c36a 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl @@ -6,6 +6,9 @@   */ +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  void calcAtmospherics(vec3 inPositionEye);  mat4 getObjectSkinnedTransform(); @@ -13,21 +16,16 @@ mat4 getObjectSkinnedTransform();  void main()  {  	//transform vertex -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1);  	mat4 mat = getObjectSkinnedTransform();  	mat = gl_ModelViewMatrix * mat; -	vec3 pos = (mat*gl_Vertex).xyz; +	vec3 pos = (mat*vec4(position.xyz, 1.0)).xyz; -	vec4 norm = gl_Vertex; -	norm.xyz += gl_Normal.xyz; -	norm.xyz = (mat*norm).xyz; -	norm.xyz = normalize(norm.xyz-pos.xyz); -		  	calcAtmospherics(pos.xyz); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  	gl_Position = gl_ProjectionMatrix*vec4(pos, 1.0); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl index 3382384c99..d88612765c 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl @@ -5,21 +5,24 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  void calcAtmospherics(vec3 inPositionEye);  void main()  {  	//transform vertex -	gl_Position = ftransform(); -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	vec4 pos = (gl_ModelViewMatrix * vec4(position.xyz, 1.0)); +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); -	vec4 pos = (gl_ModelViewMatrix * gl_Vertex); +  	calcAtmospherics(pos.xyz); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  	gl_FogFragCoord = pos.z;  } diff --git a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl index eea41bb4f0..41a9cd2fe6 100644 --- a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl @@ -5,7 +5,10 @@   * $License$   */ - +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  void calcAtmospherics(vec3 inPositionEye); @@ -16,21 +19,21 @@ void main()  	mat4 mat = getObjectSkinnedTransform();  	mat = gl_ModelViewMatrix * mat; -	vec3 pos = (mat*gl_Vertex).xyz; +	vec3 pos = (mat*vec4(position.xyz, 1.0)).xyz; -	vec4 norm = gl_Vertex; -	norm.xyz += gl_Normal.xyz; +	vec4 norm = vec4(position.xyz, 1.0); +	norm.xyz += normal.xyz;  	norm.xyz = (mat*norm).xyz;  	norm.xyz = normalize(norm.xyz-pos.xyz);  	vec3 ref = reflect(pos.xyz, -norm.xyz); -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1);  	gl_TexCoord[1] = gl_TextureMatrix[1]*vec4(ref,1.0);  	calcAtmospherics(pos.xyz); -	vec4 color = calcLighting(pos.xyz, norm.xyz, gl_Color, vec4(0.)); +	vec4 color = calcLighting(pos.xyz, norm.xyz, diffuse_color, vec4(0.));  	gl_FrontColor = color;  	gl_Position = gl_ProjectionMatrix*vec4(pos, 1.0); diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl index 68a086dbc1..4757295470 100644 --- a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl @@ -5,7 +5,10 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  void calcAtmospherics(vec3 inPositionEye); @@ -14,14 +17,14 @@ uniform vec4 origin;  void main()  {  	//transform vertex -	gl_Position = ftransform(); +	vec4 pos = (gl_ModelViewMatrix * vec4(position.xyz, 1.0)); +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); -	vec4 pos = (gl_ModelViewMatrix * gl_Vertex); -	vec3 norm = normalize(gl_NormalMatrix * gl_Normal); +	vec3 norm = normalize(gl_NormalMatrix * normal);  	calcAtmospherics(pos.xyz); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  	vec3 ref = reflect(pos.xyz, -norm); diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl index af92e5e002..fbda2e70d2 100644 --- a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl @@ -5,7 +5,10 @@   * $License$   */ - +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  void calcAtmospherics(vec3 inPositionEye); @@ -14,21 +17,21 @@ mat4 getObjectSkinnedTransform();  void main()  {  	//transform vertex -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1);  	mat4 mat = getObjectSkinnedTransform();  	mat = gl_ModelViewMatrix * mat; -	vec3 pos = (mat*gl_Vertex).xyz; +	vec3 pos = (mat*vec4(position.xyz, 1.0)).xyz; -	vec4 norm = gl_Vertex; -	norm.xyz += gl_Normal.xyz; +	vec4 norm = vec4(position.xyz, 1.0); +	norm.xyz += normal.xyz;  	norm.xyz = (mat*norm).xyz;  	norm.xyz = normalize(norm.xyz-pos.xyz);  	calcAtmospherics(pos.xyz); -	vec4 color = calcLighting(pos.xyz, norm.xyz, gl_Color, vec4(0.)); +	vec4 color = calcLighting(pos.xyz, norm.xyz, diffuse_color, vec4(0.));  	gl_FrontColor = color;  	gl_Position = gl_ProjectionMatrix*vec4(pos, 1.0); diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl index b493f76fcc..39fad42acb 100644 --- a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl @@ -5,7 +5,10 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  void calcAtmospherics(vec3 inPositionEye); @@ -13,16 +16,15 @@ void calcAtmospherics(vec3 inPositionEye);  void main()  {  	//transform vertex -	gl_Position = ftransform(); -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; -	 -	vec4 pos = (gl_ModelViewMatrix * gl_Vertex); -	 -	vec3 norm = normalize(gl_NormalMatrix * gl_Normal); +	vec4 pos = (gl_ModelViewMatrix * vec4(position.xyz, 1.0)); +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); +		 +	vec3 norm = normalize(gl_NormalMatrix * normal);  	calcAtmospherics(pos.xyz); -	vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.)); +	vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.));  	gl_FrontColor = color;  	gl_FogFragCoord = pos.z; diff --git a/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl index 3e8b719f93..e6d5c00c4d 100644 --- a/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl +++ b/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl @@ -6,6 +6,10 @@   */ +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec3 normal; +attribute vec2 texcoord0;  vec4 calcLightingSpecular(vec3 pos, vec3 norm, vec4 color, inout vec4 specularColor, vec4 baseCol);  void calcAtmospherics(vec3 inPositionEye); @@ -13,17 +17,17 @@ void calcAtmospherics(vec3 inPositionEye);  void main()  {  	//transform vertex -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; -	 -	vec3 pos = (gl_ModelViewMatrix * gl_Vertex).xyz; -	vec3 norm = normalize(gl_NormalMatrix * gl_Normal); +	vec3 pos = (gl_ModelViewMatrix * vec4(position.xyz, 1.0)).xyz; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); +		 +	vec3 norm = normalize(gl_NormalMatrix * normal);  	calcAtmospherics(pos.xyz);  	// vec4 specular = specularColor;  	vec4 specular = vec4(1.0); -	vec4 color = calcLightingSpecular(pos, norm, gl_Color, specular, vec4(0.0)); +	vec4 color = calcLightingSpecular(pos, norm, diffuse_color, specular, vec4(0.0));  	gl_FrontColor = color;  	gl_FogFragCoord = pos.z; diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl index 948a52da5b..97fe7029e1 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl @@ -5,7 +5,10 @@   * $License$   */ - +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  void calcAtmospherics(vec3 inPositionEye); @@ -59,18 +62,18 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  void main()  { -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1);  	mat4 mat = getObjectSkinnedTransform();  	mat = gl_ModelViewMatrix * mat; -	vec3 pos = (mat*gl_Vertex).xyz; +	vec3 pos = (mat*position).xyz;  	gl_Position = gl_ProjectionMatrix * vec4(pos, 1.0); -	vec4 n = gl_Vertex; -	n.xyz += gl_Normal.xyz; +	vec4 n = position; +	n.xyz += normal.xyz;  	n.xyz = (mat*n).xyz;  	n.xyz = normalize(n.xyz-pos.xyz); @@ -81,8 +84,8 @@ void main()  	calcAtmospherics(pos.xyz); -	//vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.)); -	vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a); +	//vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.)); +	vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);  	// Collect normal lights  	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].quadraticAttenuation, gl_LightSource[2].specular.a); @@ -92,23 +95,23 @@ void main()  	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].quadraticAttenuation, gl_LightSource[6].specular.a);  	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].quadraticAttenuation, gl_LightSource[7].specular.a); -	vary_pointlight_col = col.rgb*gl_Color.rgb; +	vary_pointlight_col = col.rgb*diffuse_color.rgb;  	col.rgb = vec3(0,0,0);  	// Add windlight lights  	col.rgb = atmosAmbient(vec3(0.)); -	vary_ambient = col.rgb*gl_Color.rgb; -	vary_directional.rgb = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a))); +	vary_ambient = col.rgb*diffuse_color.rgb; +	vary_directional.rgb = diffuse_color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-diffuse_color.a)*(1.0-diffuse_color.a))); -	col.rgb = min(col.rgb*gl_Color.rgb, 1.0); +	col.rgb = min(col.rgb*diffuse_color.rgb, 1.0);  	gl_FrontColor = col;  	gl_FogFragCoord = pos.z; -	pos.xyz = (gl_ModelViewProjectionMatrix * gl_Vertex).xyz; +	pos.xyz = (gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0)).xyz;  	vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip);  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl index f616ecc872..91dcca4607 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl @@ -5,7 +5,10 @@   * $/LicenseInfo$   */ - +attribute vec4 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  void calcAtmospherics(vec3 inPositionEye); @@ -61,22 +64,22 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  void main()  {  	//transform vertex -	vec4 vert = vec4(gl_Vertex.xyz, 1.0); -	vary_texture_index = gl_Vertex.w; -	gl_Position = gl_ModelViewProjectionMatrix * vert;  -	 -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; -	 +	vec4 vert = vec4(position.xyz, 1.0); +	vary_texture_index = position.w;  	vec4 pos = (gl_ModelViewMatrix * vert); -	vec3 norm = normalize(gl_NormalMatrix * gl_Normal); +	gl_Position = gl_ModelViewProjectionMatrix*vec4(position.xyz, 1.0); +	 +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); +		 +	vec3 norm = normalize(gl_NormalMatrix * normal);  	float dp_directional_light = max(0.0, dot(norm, gl_LightSource[0].position.xyz));  	vary_position = pos.xyz + gl_LightSource[0].position.xyz * (1.0-dp_directional_light)*shadow_offset;  	calcAtmospherics(pos.xyz); -	//vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.)); -	vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a); +	//vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.)); +	vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);  	// Collect normal lights  	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].quadraticAttenuation, gl_LightSource[2].specular.a); @@ -86,17 +89,17 @@ void main()  	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].quadraticAttenuation, gl_LightSource[6].specular.a);  	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].quadraticAttenuation, gl_LightSource[7].specular.a); -	vary_pointlight_col = col.rgb*gl_Color.rgb; +	vary_pointlight_col = col.rgb*diffuse_color.rgb;  	col.rgb = vec3(0,0,0);  	// Add windlight lights  	col.rgb = atmosAmbient(vec3(0.)); -	vary_ambient = col.rgb*gl_Color.rgb; -	vary_directional.rgb = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a))); +	vary_ambient = col.rgb*diffuse_color.rgb; +	vary_directional.rgb = diffuse_color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-diffuse_color.a)*(1.0-diffuse_color.a))); -	col.rgb = col.rgb*gl_Color.rgb; +	col.rgb = col.rgb*diffuse_color.rgb;  	gl_FrontColor = col; diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl index 01e40afc4f..65c3e5da10 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl @@ -6,6 +6,10 @@   */ +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  mat4 getSkinnedTransform(); @@ -61,20 +65,21 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  void main()  { -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	vec4 pos;  	vec3 norm;  	mat4 trans = getSkinnedTransform(); -	pos.x = dot(trans[0], gl_Vertex); -	pos.y = dot(trans[1], gl_Vertex); -	pos.z = dot(trans[2], gl_Vertex); +	vec4 pos_in = vec4(position.xyz, 1.0); +	pos.x = dot(trans[0], pos_in); +	pos.y = dot(trans[1], pos_in); +	pos.z = dot(trans[2], pos_in);  	pos.w = 1.0; -	norm.x = dot(trans[0].xyz, gl_Normal); -	norm.y = dot(trans[1].xyz, gl_Normal); -	norm.z = dot(trans[2].xyz, gl_Normal); +	norm.x = dot(trans[0].xyz, normal); +	norm.y = dot(trans[1].xyz, normal); +	norm.z = dot(trans[2].xyz, normal);  	norm = normalize(norm);  	gl_Position = gl_ProjectionMatrix * pos; @@ -84,9 +89,9 @@ void main()  	calcAtmospherics(pos.xyz); -	//vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.)); +	//vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.)); -	vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a); +	vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);  	// Collect normal lights  	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].quadraticAttenuation, gl_LightSource[2].specular.a); @@ -96,17 +101,17 @@ void main()  	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].quadraticAttenuation, gl_LightSource[6].specular.a);  	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].quadraticAttenuation, gl_LightSource[7].specular.a); -	vary_pointlight_col = col.rgb*gl_Color.rgb; +	vary_pointlight_col = col.rgb*diffuse_color.rgb;  	col.rgb = vec3(0,0,0);  	// Add windlight lights  	col.rgb = atmosAmbient(vec3(0.)); -	vary_ambient = col.rgb*gl_Color.rgb; -	vary_directional = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a))); +	vary_ambient = col.rgb*diffuse_color.rgb; +	vary_directional = diffuse_color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-diffuse_color.a)*(1.0-diffuse_color.a))); -	col.rgb = min(col.rgb*gl_Color.rgb, 1.0); +	col.rgb = min(col.rgb*diffuse_color.rgb, 1.0);  	gl_FrontColor = col; diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl index 393084a3db..5e19a3b043 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl @@ -6,6 +6,7 @@   */ +attribute vec3 position;  varying vec2 vary_fragcoord;  uniform vec2 screen_res; @@ -13,7 +14,7 @@ uniform vec2 screen_res;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos;   	vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl index 745cc01992..d2e3415d91 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl @@ -6,6 +6,8 @@   */ +attribute vec3 position; +attribute vec2 texcoord0;  uniform vec2 screen_res; @@ -14,13 +16,11 @@ varying vec2 vary_fragcoord;  void main()  {  	//transform vertex -	gl_Position = ftransform();  +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos;  +	 -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex;  	vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; -	vec4 tex = gl_MultiTexCoord0; -	tex.w = 1.0; -	 -	vary_light = gl_MultiTexCoord0; +	vary_light = vec4(texcoord0,0,1);  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl index 814deb3677..6795b55dc6 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl @@ -5,6 +5,10 @@   * $/LicenseInfo$   */ +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  varying vec4 vary_light; @@ -15,13 +19,14 @@ uniform vec2 screen_res;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos;  +	  	vary_fragcoord = (pos.xy * 0.5 + 0.5)*screen_res;	 -	vec4 tex = gl_MultiTexCoord0; +	vec4 tex = vec4(texcoord0,0,1);  	tex.w = 1.0; -	vary_light = gl_MultiTexCoord0; +	vary_light = vec4(texcoord0,0,1); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class2/effects/blurV.glsl b/indra/newview/app_settings/shaders/class2/effects/blurV.glsl index de469542f9..68f79fba82 100644 --- a/indra/newview/app_settings/shaders/class2/effects/blurV.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/blurV.glsl @@ -6,6 +6,8 @@   */ +attribute vec3 position; +attribute vec2 texcoord0;  uniform vec2 texelSize;  uniform vec2 blurDirection; @@ -14,10 +16,10 @@ uniform float blurWidth;  void main(void)  {  	// Transform vertex -	gl_Position = ftransform(); +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0);  	vec2 blurDelta = texelSize * blurDirection * vec2(blurWidth, blurWidth); -	vec2 s = gl_MultiTexCoord0.st - (blurDelta * 3.0); +	vec2 s = vec4(texcoord0,0,1).st - (blurDelta * 3.0);  	// for (int i = 0; i < 7; i++) {  		// gl_TexCoord[i].st = s + (i * blurDelta); diff --git a/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl b/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl index 9c52b8dd5d..7dd2ead200 100644 --- a/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl @@ -6,11 +6,15 @@   */ +attribute vec3 position; +attribute vec2 texcoord0; +attribute vec2 texcoord1; +  void main(void)  {  	//transform vertex -	gl_Position = ftransform(); -	gl_TexCoord[0] = gl_MultiTexCoord0; -	gl_TexCoord[1] = gl_MultiTexCoord1; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_TexCoord[0] = vec4(texcoord0,0,1); +	gl_TexCoord[1] = vec4(texcoord1,0,1);  } diff --git a/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl b/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl index 2658bee88d..b5367b5dae 100644 --- a/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl @@ -6,6 +6,12 @@   */ +attribute vec3 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0; +attribute vec2 texcoord1; +  void calcAtmospherics(vec3 inPositionEye); @@ -28,24 +34,24 @@ vec4 texgen_object(vec4  vpos, vec4 tc, mat4 mat, vec4 tp0, vec4 tp1)  void main()  {  	//transform vertex -	gl_Position = ftransform(); +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); + +	vec4 pos = gl_ModelViewMatrix * vec4(position.xyz, 1.0); +	vec3 norm = normalize(gl_NormalMatrix * normal); -	vec4 pos = gl_ModelViewMatrix * gl_Vertex; -	vec3 norm = normalize(gl_NormalMatrix * gl_Normal); +	calcAtmospherics(pos.xyz);  	/// Potentially better without it for water.  	pos /= pos.w; -	calcAtmospherics((gl_ModelViewMatrix * gl_Vertex).xyz); - -	vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0)); +	vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0));  	gl_FrontColor = color;  	// Transform and pass tex coords - 	gl_TexCoord[0].xy = texgen_object(gl_Vertex, gl_MultiTexCoord0, gl_TextureMatrix[0], gl_ObjectPlaneS[0], gl_ObjectPlaneT[0]).xy; + 	gl_TexCoord[0].xy = texgen_object(vec4(position.xyz, 1.0), vec4(texcoord0,0,1), gl_TextureMatrix[0], gl_ObjectPlaneS[0], gl_ObjectPlaneT[0]).xy; -	vec4 t = gl_MultiTexCoord1; +	vec4 t = vec4(texcoord1,0,1);  	gl_TexCoord[0].zw = t.xy;  	gl_TexCoord[1].xy = t.xy-vec2(2.0, 0.0); diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl index 3d43a1813a..bc927cfdb6 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl @@ -5,8 +5,6 @@   * $/LicenseInfo$   */ - -  float calcDirectionalLight(vec3 n, vec3 l);  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight); diff --git a/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl index f49e74406f..72a18c6858 100644 --- a/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl +++ b/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl @@ -13,23 +13,28 @@ uniform vec4 origin;  varying float vary_texture_index; +attribute vec4 position; +attribute vec3 normal; +attribute vec4 diffuse_color; +attribute vec2 texcoord0; +  void main()  {  	//transform vertex -	vec4 vert = vec4(gl_Vertex.xyz,1.0); -	vary_texture_index = gl_Vertex.w; -	gl_Position = gl_ModelViewProjectionMatrix*vert; -	 +	vec4 vert = vec4(position.xyz,1.0); +	vary_texture_index = position.w;  	vec4 pos = (gl_ModelViewMatrix * vert); -	vec3 norm = normalize(gl_NormalMatrix * gl_Normal); +	gl_Position = gl_ModelViewProjectionMatrix*vec4(position.xyz, 1.0); +	 +	vec3 norm = normalize(gl_NormalMatrix * normal);  	vec3 ref = reflect(pos.xyz, -norm); -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1);  	gl_TexCoord[1] = gl_TextureMatrix[1]*vec4(ref,1.0);  	calcAtmospherics(pos.xyz); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  	gl_FogFragCoord = pos.z;  } diff --git a/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl b/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl index 3076fa3260..cf8ea23c36 100644 --- a/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl +++ b/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl @@ -5,6 +5,11 @@   * $/LicenseInfo$   */ +  +attribute vec4 position; +attribute vec2 texcoord0; +attribute vec3 normal; +attribute vec4 diffuse_color;  void calcAtmospherics(vec3 inPositionEye); @@ -14,16 +19,15 @@ varying float vary_texture_index;  void main()  {  	//transform vertex -	vec4 vert = vec4(gl_Vertex.xyz,1.0); -	vary_texture_index = gl_Vertex.w; -	gl_Position = gl_ModelViewProjectionMatrix*vert; -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; -	 +	vec4 vert = vec4(position.xyz,1.0); +	vary_texture_index = position.w;  	vec4 pos = (gl_ModelViewMatrix * vert); - +	gl_Position = gl_ModelViewProjectionMatrix*vec4(position.xyz, 1.0); +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1); +	  	calcAtmospherics(pos.xyz); -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  	gl_FogFragCoord = pos.z;  } diff --git a/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl b/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl index 49992d3535..5d633f53d5 100644 --- a/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl +++ b/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl @@ -6,6 +6,10 @@   */ +attribute vec4 position; +attribute vec2 texcoord0; +attribute vec3 normal; +attribute vec4 diffuse_color;  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); @@ -18,20 +22,20 @@ uniform vec4 origin;  void main()  {  	//transform vertex -	vec4 vert = vec4(gl_Vertex.xyz,1.0); -	vary_texture_index = gl_Vertex.w; -	gl_Position = gl_ModelViewProjectionMatrix*vert; -	 +	vec4 vert = vec4(position.xyz,1.0); +	vary_texture_index = position.w;  	vec4 pos = (gl_ModelViewMatrix * vert); -	vec3 norm = normalize(gl_NormalMatrix * gl_Normal); +	gl_Position = gl_ModelViewProjectionMatrix*vec4(position.xyz, 1.0); +		 +	vec3 norm = normalize(gl_NormalMatrix * normal);  	vec3 ref = reflect(pos.xyz, -norm); -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0,0,1);  	gl_TexCoord[1] = gl_TextureMatrix[1]*vec4(ref,1.0);  	calcAtmospherics(pos.xyz); -	gl_FrontColor = calcLighting(pos.xyz, norm, gl_Color, vec4(0.0)); +	gl_FrontColor = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.0));  	gl_FogFragCoord = pos.z;  } diff --git a/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl b/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl index 5e02391767..4f53cde40c 100644 --- a/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl +++ b/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl @@ -7,6 +7,11 @@ +attribute vec4 position; +attribute vec2 texcoord0; +attribute vec3 normal; +attribute vec4 diffuse_color; +  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  void calcAtmospherics(vec3 inPositionEye); @@ -15,18 +20,19 @@ varying float vary_texture_index;  void main()  {  	//transform vertex -	vec4 vert = vec4(gl_Vertex.xyz,1.0); -	vary_texture_index = gl_Vertex.w; -	gl_Position = gl_ModelViewProjectionMatrix*vert; -	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; -	 +	vec4 vert = vec4(position.xyz,1.0); +	vary_texture_index = position.w;  	vec4 pos = (gl_ModelViewMatrix * vert); +	gl_Position = gl_ModelViewProjectionMatrix*vec4(position.xyz, 1.0); +	gl_TexCoord[0] = gl_TextureMatrix[0] * vec4(texcoord0, 0, 1); +	 +	 -	vec3 norm = normalize(gl_NormalMatrix * gl_Normal); +	vec3 norm = normalize(gl_NormalMatrix * normal);  	calcAtmospherics(pos.xyz); -	vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.)); +	vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.));  	gl_FrontColor = color;  	gl_FogFragCoord = pos.z; diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl index 3eac63076c..9ba5e97a95 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl @@ -5,7 +5,8 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec2 texcoord0;  //////////////////////////////////////////////////////////////////////////  // The vertex shader for creating the atmospheric sky @@ -41,12 +42,12 @@ void main()  {  	// World / view / projection -	gl_Position = ftransform(); +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	// Get relative position -	vec3 P = gl_Vertex.xyz - camPosLocal.xyz + vec3(0,50,0); +	vec3 P = position.xyz - camPosLocal.xyz + vec3(0,50,0);  	// Set altitude  	if (P.y > 0.) @@ -142,7 +143,7 @@ void main()  	// Texture coords -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	gl_TexCoord[0].xy -= 0.5;  	gl_TexCoord[0].xy /= cloud_scale.x;  	gl_TexCoord[0].xy += 0.5; diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl index 1ea00f723a..31c995a542 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl @@ -6,6 +6,8 @@   */ +attribute vec3 position; +attribute vec2 texcoord0;  // SKY ////////////////////////////////////////////////////////////////////////  // The vertex shader for creating the atmospheric sky @@ -39,12 +41,12 @@ void main()  {  	// World / view / projection -	gl_Position = ftransform(); -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	// Get relative position -	vec3 P = gl_Vertex.xyz - camPosLocal.xyz + vec3(0,50,0); -	//vec3 P = gl_Vertex.xyz + vec3(0,50,0); +	vec3 P = position.xyz - camPosLocal.xyz + vec3(0,50,0); +	//vec3 P = position.xyz + vec3(0,50,0);  	// Set altitude  	if (P.y > 0.) diff --git a/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl b/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl index 3d970d252c..f65dfff42f 100644 --- a/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl +++ b/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl @@ -5,38 +5,39 @@   * $/LicenseInfo$   */ - +attribute vec3 position; +attribute vec3 normal; +attribute vec2 texcoord0; +attribute vec4 clothing;   vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  mat4 getSkinnedTransform();  void calcAtmospherics(vec3 inPositionEye); -attribute vec4 clothing; //4 - -attribute vec4 gWindDir;		//7 -attribute vec4 gSinWaveParams; //3 -attribute vec4 gGravity;		//5 +uniform vec4 gWindDir;		 +uniform vec4 gSinWaveParams;  +uniform vec4 gGravity;		  const vec4 gMinMaxConstants = vec4(1.0, 0.166666, 0.0083143, .00018542);	 // #minimax-generated coefficients  const vec4 gPiConstants	= vec4(0.159154943, 6.28318530, 3.141592653, 1.5707963); //	# {1/2PI, 2PI, PI, PI/2}  void main()  { -	gl_TexCoord[0] = gl_MultiTexCoord0; +	gl_TexCoord[0] = vec4(texcoord0,0,1);  	vec4 pos;  	mat4 trans = getSkinnedTransform();  	vec3 norm; -	norm.x = dot(trans[0].xyz, gl_Normal); -	norm.y = dot(trans[1].xyz, gl_Normal); -	norm.z = dot(trans[2].xyz, gl_Normal); +	norm.x = dot(trans[0].xyz, normal); +	norm.y = dot(trans[1].xyz, normal); +	norm.z = dot(trans[2].xyz, normal);  	norm = normalize(norm);  	//wind  	vec4 windEffect;  	windEffect = vec4(dot(norm, gWindDir.xyz));	 -	pos.x = dot(trans[2].xyz, gl_Vertex.xyz); +	pos.x = dot(trans[2].xyz, position.xyz);  	windEffect.xyz = pos.x * vec3(0.015, 0.015, 0.015)  						+ windEffect.xyz;  	windEffect.w = windEffect.w * 2.0 + 1.0;				// move wind offset value to [-1, 3] @@ -83,7 +84,7 @@ void main()  	sinWave.xyz = max(sinWave.xyz, vec3(-1.0, -1.0, -1.0));	// clamp to underlying body shape  	offsetPos = clothing * sinWave.x;						// multiply wind effect times clothing displacement  	temp2 = gWindDir*sinWave.z + vec4(norm,0);				// calculate normal offset due to wind oscillation -	offsetPos = vec4(1.0,1.0,1.0,0.0)*offsetPos+gl_Vertex;	// add to offset vertex position, and zero out effect from w +	offsetPos = vec4(1.0,1.0,1.0,0.0)*offsetPos+vec4(position.xyz, 1.0);	// add to offset vertex position, and zero out effect from w  	norm += temp2.xyz*2.0;									// add sin wave effect on normals (exaggerated)  	//add "backlighting" effect @@ -101,7 +102,7 @@ void main()  	calcAtmospherics(pos.xyz); -	vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.0));			 +	vec4 color = calcLighting(pos.xyz, norm, vec4(1,1,1,1), vec4(0.0));			  	gl_FrontColor = color;   	gl_Position = gl_ProjectionMatrix * pos; diff --git a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl index eebe930666..b769e1ee1d 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl @@ -5,7 +5,7 @@   * $/LicenseInfo$   */ - +attribute vec3 position;  varying vec2 vary_fragcoord;  uniform vec2 screen_res; @@ -13,7 +13,7 @@ uniform vec2 screen_res;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos; 	  	vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;  } diff --git a/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl index 7e20d71529..057d36ed22 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl @@ -5,6 +5,7 @@   * $/LicenseInfo$   */ +attribute vec3 position;  varying vec2 vary_fragcoord; @@ -13,7 +14,7 @@ uniform vec2 screen_res;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos;  	vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;  } diff --git a/indra/newview/app_settings/shaders/class3/deferred/giV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giV.glsl index e86f2896da..d97d7ea82d 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giV.glsl @@ -5,6 +5,9 @@   * $/LicenseInfo$   */ +attribute vec3 position; +attribute vec4 diffuse_color; +attribute vec2 texcoord0;  varying vec2 vary_fragcoord; @@ -14,11 +17,12 @@ uniform vec2 screen_res;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos;  +	  	vary_fragcoord = (pos.xy * 0.5 + 0.5)*screen_res;	 -	vec4 tex = gl_MultiTexCoord0; +	vec4 tex = vec4(texcoord0,0,1);  	tex.w = 1.0; -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl b/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl index 9afeac6ddf..5bdb69fb6f 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl @@ -5,18 +5,20 @@   * $/LicenseInfo$   */ - -  varying vec2 vary_fragcoord;  uniform vec2 screen_res; +attribute vec3 position; +attribute vec4 diffuse_color; +  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos;  +	  	vary_fragcoord = (pos.xy * 0.5 + 0.5)*screen_res;	 -	gl_FrontColor = gl_Color; +	gl_FrontColor = diffuse_color;  } diff --git a/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl index 876f65ee3a..2581098609 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl @@ -5,7 +5,7 @@   * $/LicenseInfo$   */ - +attribute vec3 position;  varying vec2 vary_fragcoord;  uniform vec2 screen_res; @@ -13,7 +13,7 @@ uniform vec2 screen_res;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos;   	vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;  } diff --git a/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl b/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl index eebe930666..ed6fd1ee80 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl @@ -5,7 +5,7 @@   * $/LicenseInfo$   */ - +attribute vec3 position;  varying vec2 vary_fragcoord;  uniform vec2 screen_res; @@ -13,7 +13,7 @@ uniform vec2 screen_res;  void main()  {  	//transform vertex -	gl_Position = ftransform();  -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos;   	vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;  } diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl index 745cc01992..9872c9f366 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl @@ -6,6 +6,8 @@   */ +attribute vec3 position; +attribute vec2 texcoord0;  uniform vec2 screen_res; @@ -14,13 +16,10 @@ varying vec2 vary_fragcoord;  void main()  {  	//transform vertex -	gl_Position = ftransform();  +	vec4 pos = gl_ModelViewProjectionMatrix * vec4(position.xyz, 1.0); +	gl_Position = pos; 	 -	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex;  	vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; -	vec4 tex = gl_MultiTexCoord0; -	tex.w = 1.0; -	 -	vary_light = gl_MultiTexCoord0; +	vary_light = vec4(texcoord0,0,1);  } diff --git a/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl index 24bbc0a1a1..9144b8361f 100644 --- a/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl +++ b/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl @@ -6,7 +6,6 @@   */ -  float calcDirectionalLight(vec3 n, vec3 l);  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight); diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 492cfe7c1b..e3be6b0402 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -3925,7 +3925,7 @@ void LLAgent::renderAutoPilotTarget()  		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);  		// lovely green -		glColor4f(0.f, 1.f, 1.f, 1.f); +		gGL.diffuseColor4f(0.f, 1.f, 1.f, 1.f);  		target_global = mAutoPilotTargetGlobal; diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index 286284f828..0c572def72 100644 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -384,7 +384,7 @@ BOOL LLFacePool::LLOverrideFaceColor::sOverrideFaceColor = FALSE;  void LLFacePool::LLOverrideFaceColor::setColor(const LLColor4& color)  { -	glColor4fv(color.mV); +	gGL.diffuseColor4fv(color.mV);  }  void LLFacePool::LLOverrideFaceColor::setColor(const LLColor4U& color) @@ -394,7 +394,7 @@ void LLFacePool::LLOverrideFaceColor::setColor(const LLColor4U& color)  void LLFacePool::LLOverrideFaceColor::setColor(F32 r, F32 g, F32 b, F32 a)  { -	glColor4f(r,g,b,a); +	gGL.diffuseColor4f(r,g,b,a);  } diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index 9719140a37..ef8819d9b5 100644 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -54,7 +54,7 @@ static BOOL deferred_render = FALSE;  LLDrawPoolAlpha::LLDrawPoolAlpha(U32 type) :  		LLRenderPass(type), current_shader(NULL), target_shader(NULL), -		simple_shader(NULL), fullbright_shader(NULL), +		simple_shader(NULL), fullbright_shader(NULL), emissive_shader(NULL),  		mColorSFactor(LLRender::BF_UNDEF), mColorDFactor(LLRender::BF_UNDEF),  		mAlphaSFactor(LLRender::BF_UNDEF), mAlphaDFactor(LLRender::BF_UNDEF)  { @@ -175,11 +175,13 @@ void LLDrawPoolAlpha::beginRenderPass(S32 pass)  	{  		simple_shader = &gObjectSimpleWaterAlphaMaskProgram;  		fullbright_shader = &gObjectFullbrightWaterAlphaMaskProgram; +		emissive_shader = &gObjectEmissiveWaterProgram;  	}  	else  	{  		simple_shader = &gObjectSimpleAlphaMaskProgram;  		fullbright_shader = &gObjectFullbrightAlphaMaskProgram; +		emissive_shader = &gObjectEmissiveProgram;  	}  	if (mVertexShaderLevel > 0) @@ -319,20 +321,22 @@ void LLDrawPoolAlpha::render(S32 pass)  		BOOL shaders = gPipeline.canUseVertexShaders();  		if(shaders)   		{ -			gObjectFullbrightNonIndexedProgram.bind(); +			gHighlightProgram.bind(); +			gHighlightProgram.uniform4f("highlight_color", 1,0,0,1);  		}  		else  		{  			gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); +			gGL.diffuseColor4f(1,0,0,1);  		} -		glColor4f(1,0,0,1); +		  		LLViewerFetchedTexture::sSmokeImagep->addTextureStats(1024.f*1024.f);  		gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sSmokeImagep, TRUE) ;  		renderAlphaHighlight(LLVertexBuffer::MAP_VERTEX |  							LLVertexBuffer::MAP_TEXCOORD0);  		if(shaders)   		{ -			gObjectFullbrightNonIndexedProgram.unbind(); +			gHighlightProgram.unbind();  		}  	}  } @@ -489,22 +493,25 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)  				// If this alpha mesh has glow, then draw it a second time to add the destination-alpha (=glow).  Interleaving these state-changing calls could be expensive, but glow must be drawn Z-sorted with alpha.  				if (draw_glow_for_this_partition && -				    params.mGlowColor.mV[3] > 0) +					params.mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_EMISSIVE))  				{  					// install glow-accumulating blend mode  					gGL.blendFunc(LLRender::BF_ZERO, LLRender::BF_ONE, // don't touch color  						      LLRender::BF_ONE, LLRender::BF_ONE); // add to alpha (glow) +					emissive_shader->bind(); +					  					// glow doesn't use vertex colors from the mesh data -					params.mVertexBuffer->setBuffer(mask & ~LLVertexBuffer::MAP_COLOR); -					glColor4ubv(params.mGlowColor.mV); - +					params.mVertexBuffer->setBuffer((mask & ~LLVertexBuffer::MAP_COLOR) | LLVertexBuffer::MAP_EMISSIVE); +					  					// do the actual drawing, again  					params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);  					gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode);  					// restore our alpha blend mode  					gGL.blendFunc(mColorSFactor, mColorDFactor, mAlphaSFactor, mAlphaDFactor); + +					current_shader->bind();  				}  				if (tex_setup) diff --git a/indra/newview/lldrawpoolalpha.h b/indra/newview/lldrawpoolalpha.h index 12a7ae92b1..a4245e561d 100644 --- a/indra/newview/lldrawpoolalpha.h +++ b/indra/newview/lldrawpoolalpha.h @@ -78,6 +78,7 @@ private:  	LLGLSLShader* target_shader;  	LLGLSLShader* simple_shader;  	LLGLSLShader* fullbright_shader;	 +	LLGLSLShader* emissive_shader;  	// our 'normal' alpha blend function for this pass  	LLRender::eBlendFactor mColorSFactor; diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 694b7dcedd..dae995e1f5 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -263,7 +263,6 @@ void LLDrawPoolAvatar::beginPostDeferredAlpha()  	gPipeline.bindDeferredShader(*sVertexProgram);  	sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); -	enable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]);  }  void LLDrawPoolAvatar::beginDeferredRiggedAlpha() @@ -314,8 +313,7 @@ void LLDrawPoolAvatar::endPostDeferredAlpha()  	// if we're in software-blending, remember to set the fence _after_ we draw so we wait till this rendering is done  	sRenderingSkinned = FALSE;  	sSkipOpaque = FALSE; -	disable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]); -	 +		  	gPipeline.unbindDeferredShader(*sVertexProgram);  	sDiffuseChannel = 0;  	sShaderLevel = mVertexShaderLevel; @@ -362,13 +360,12 @@ void LLDrawPoolAvatar::beginShadowPass(S32 pass)  		}  		//gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f); -		glColor4f(1,1,1,1); +		gGL.diffuseColor4f(1,1,1,1);  		if ((sShaderLevel > 0))  // for hardware blending  		{  			sRenderingSkinned = TRUE;  			sVertexProgram->bind(); -			enable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]);  		}  	}  	else @@ -389,7 +386,6 @@ void LLDrawPoolAvatar::endShadowPass(S32 pass)  		{  			sRenderingSkinned = FALSE;  			sVertexProgram->unbind(); -			disable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]);  		}  	}  	else @@ -492,11 +488,6 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass)  	//reset vertex buffer mappings  	LLVertexBuffer::unbind(); -	if (pass == 0) -	{ //make sure no stale colors are left over from a previous render -		glColor4f(1,1,1,1); -	} -  	if (LLPipeline::sImpostorRender)  	{ //impostor render does not have impostors or rigid rendering  		pass += 2; @@ -535,6 +526,11 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass)  		beginRiggedGlow();  		break;  	} + +	if (pass == 0) +	{ //make sure no stale colors are left over from a previous render +		gGL.diffuseColor4f(1,1,1,1); +	}  }  void LLDrawPoolAvatar::endRenderPass(S32 pass) @@ -604,11 +600,11 @@ void LLDrawPoolAvatar::beginRigid()  	{  		if (LLPipeline::sUnderWaterRender)  		{ -			sVertexProgram = &gObjectAlphaMaskNonIndexedWaterProgram; +			sVertexProgram = &gObjectAlphaMaskNoColorWaterProgram;  		}  		else  		{ -			sVertexProgram = &gObjectAlphaMaskNonIndexedProgram; +			sVertexProgram = &gObjectAlphaMaskNoColorProgram;  		}  		if (sVertexProgram != NULL) @@ -692,11 +688,11 @@ void LLDrawPoolAvatar::beginSkinned()  	{  		if (LLPipeline::sUnderWaterRender)  		{ -			sVertexProgram = &gObjectAlphaMaskNonIndexedWaterProgram; +			sVertexProgram = &gObjectAlphaMaskNoColorWaterProgram;  		}  		else  		{ -			sVertexProgram = &gObjectAlphaMaskNonIndexedProgram; +			sVertexProgram = &gObjectAlphaMaskNoColorProgram;  		}  	} @@ -705,17 +701,6 @@ void LLDrawPoolAvatar::beginSkinned()  		sRenderingSkinned = TRUE;  		sVertexProgram->bind(); -		if (sShaderLevel >= SHADER_LEVEL_CLOTH) -		{ -			enable_cloth_weights(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_CLOTHING]); -		} -		enable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]); - -		if (sShaderLevel >= SHADER_LEVEL_BUMP) -		{ -			enable_binormals(sVertexProgram->mAttribute[LLViewerShaderMgr::BINORMAL]); -		} -		  		sVertexProgram->enableTexture(LLViewerShaderMgr::BUMP_MAP);  		gGL.getTexUnit(0)->activate();  	} @@ -743,16 +728,6 @@ void LLDrawPoolAvatar::endSkinned()  		sRenderingSkinned = FALSE;  		sVertexProgram->disableTexture(LLViewerShaderMgr::BUMP_MAP);  		gGL.getTexUnit(0)->activate(); -		disable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]); -		if (sShaderLevel >= SHADER_LEVEL_BUMP) -		{ -			disable_binormals(sVertexProgram->mAttribute[LLViewerShaderMgr::BINORMAL]); -		} -		if ((sShaderLevel >= SHADER_LEVEL_CLOTH)) -		{ -			disable_cloth_weights(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_CLOTHING]); -		} -  		sVertexProgram->unbind();  		sShaderLevel = mVertexShaderLevel;  	} @@ -1027,8 +1002,6 @@ void LLDrawPoolAvatar::beginDeferredSkinned()  	sVertexProgram->bind();  	sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); -	enable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]); -  	gGL.getTexUnit(0)->activate();  } @@ -1036,7 +1009,6 @@ void LLDrawPoolAvatar::endDeferredSkinned()  {  	// if we're in software-blending, remember to set the fence _after_ we draw so we wait till this rendering is done  	sRenderingSkinned = FALSE; -	disable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]);  	sVertexProgram->unbind();  	sVertexProgram->disableTexture(LLViewerShaderMgr::DIFFUSE_MAP); @@ -1150,10 +1122,10 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  		return;  	} -	if (single_avatar && avatarp->mSpecialRenderMode >= 1) // 1=anim preview, 2=image preview,  3=morph view +	/*if (single_avatar && avatarp->mSpecialRenderMode >= 1) // 1=anim preview, 2=image preview,  3=morph view  	{  		gPipeline.enableLightsAvatarEdit(LLColor4(.5f, .5f, .5f, 1.f)); -	} +	}*/  	if (pass == 1)  	{ @@ -1262,16 +1234,16 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  		wind = wind * rot_mat;  		wind.mV[VW] = avatarp->mWindVec.mV[VW]; -		sVertexProgram->vertexAttrib4fv(LLViewerShaderMgr::AVATAR_WIND, wind.mV); +		sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_WIND, 1, wind.mV);  		F32 phase = -1.f * (avatarp->mRipplePhase);  		F32 freq = 7.f + (noise1(avatarp->mRipplePhase) * 2.f);  		LLVector4 sin_params(freq, freq, freq, phase); -		sVertexProgram->vertexAttrib4fv(LLViewerShaderMgr::AVATAR_SINWAVE, sin_params.mV); +		sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_SINWAVE, 1, sin_params.mV);  		LLVector4 gravity(0.f, 0.f, -CLOTHING_GRAVITY_EFFECT, 0.f);  		gravity = gravity * rot_mat; -		sVertexProgram->vertexAttrib4fv(LLViewerShaderMgr::AVATAR_GRAVITY, gravity.mV); +		sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_GRAVITY, 1, gravity.mV);  	}  	if( !single_avatar || (avatarp == single_avatar) ) @@ -1509,7 +1481,7 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)  			if (glow)  			{ -				glColor4f(0,0,0,face->getTextureEntry()->getGlow()); +				gGL.diffuseColor4f(0,0,0,face->getTextureEntry()->getGlow());  			}  			gGL.getTexUnit(sDiffuseChannel)->bind(face->getTexture()); @@ -1662,7 +1634,7 @@ LLVertexBufferAvatar::LLVertexBufferAvatar()  void LLVertexBufferAvatar::setupVertexBuffer(U32 data_mask) const  { -	if (sRenderingSkinned) +	/*if (sRenderingSkinned)  	{  		U8* base = useVBOs() ? (U8*) mAlignedOffset : mMappedData; @@ -1686,8 +1658,8 @@ void LLVertexBufferAvatar::setupVertexBuffer(U32 data_mask) const  		}  	}  	else -	{ +	{*/  		LLVertexBuffer::setupVertexBuffer(data_mask); -	} +	//}  } diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 6f71c54f79..6931ada7cd 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -762,7 +762,7 @@ void LLDrawPoolBump::renderBump(U32 pass)  	LLGLDisable fog(GL_FOG);  	LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_LEQUAL);  	LLGLEnable blend(GL_BLEND); -	glColor4f(1,1,1,1); +	gGL.diffuseColor4f(1,1,1,1);  	/// Get rid of z-fighting with non-bump pass.  	LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL);  	glPolygonOffset(-1.0f, -1.0f); diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp index eec4ee6bac..582e462871 100644 --- a/indra/newview/lldrawpoolsimple.cpp +++ b/indra/newview/lldrawpoolsimple.cpp @@ -80,6 +80,18 @@ void LLDrawPoolGlow::endPostDeferredPass(S32 pass)  	LLRenderPass::endRenderPass(pass);  } +S32 LLDrawPoolGlow::getNumPasses() +{ +	if (LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT) > 0) +	{ +		return 1; +	} +	else +	{ +		return 0; +	} +} +  void LLDrawPoolGlow::render(S32 pass)  {  	LLFastTimer t(FTM_RENDER_GLOW); @@ -93,39 +105,29 @@ void LLDrawPoolGlow::render(S32 pass)  	U32 shader_level = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT); -	if (shader_level > 0 && fullbright_shader) -	{ -		fullbright_shader->bind(); -	} -	else -	{ -		gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); -	} +	//should never get here without basic shaders enabled +	llassert(shader_level > 0); +	 +	LLGLSLShader* shader = LLPipeline::sUnderWaterRender ? &gObjectEmissiveWaterProgram : &gObjectEmissiveProgram; +	shader->bind();  	LLGLDepthTest depth(GL_TRUE, GL_FALSE);  	gGL.setColorMask(false, true); -	if (shader_level > 1) -	{ -		pushBatches(LLRenderPass::PASS_GLOW, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE); -	} -	else -	{ -		renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask()); -	} +	pushBatches(LLRenderPass::PASS_GLOW, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);  	gGL.setColorMask(true, false);  	gGL.setSceneBlendType(LLRender::BT_ALPHA);  	if (shader_level > 0 && fullbright_shader)  	{ -		fullbright_shader->unbind(); +		shader->unbind();  	}  }  void LLDrawPoolGlow::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL batch_textures)  { -	glColor4ubv(params.mGlowColor.mV); +	//gGL.diffuseColor4ubv(params.mGlowColor.mV);  	LLRenderPass::pushBatch(params, mask, texture, batch_textures);  } diff --git a/indra/newview/lldrawpoolsimple.h b/indra/newview/lldrawpoolsimple.h index 3811b3d398..bd62bc7502 100644 --- a/indra/newview/lldrawpoolsimple.h +++ b/indra/newview/lldrawpoolsimple.h @@ -118,7 +118,8 @@ public:  	enum  	{  		VERTEX_DATA_MASK =	LLVertexBuffer::MAP_VERTEX | -							LLVertexBuffer::MAP_TEXCOORD0 +							LLVertexBuffer::MAP_TEXCOORD0 | +							LLVertexBuffer::MAP_EMISSIVE  	};  	virtual U32 getVertexDataMask() { return VERTEX_DATA_MASK; } @@ -130,6 +131,8 @@ public:  	/*virtual*/ void endPostDeferredPass(S32 pass);  	/*virtual*/ void renderPostDeferred(S32 pass); +	/*virtual*/ S32 getNumPasses(); +  	void render(S32 pass = 0);  	void pushBatch(LLDrawInfo& params, U32 mask, BOOL texture = TRUE, BOOL batch_textures = FALSE); diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp index efffb2df9e..d1c8fa5fc9 100644 --- a/indra/newview/lldrawpoolsky.cpp +++ b/indra/newview/lldrawpoolsky.cpp @@ -84,7 +84,7 @@ void LLDrawPoolSky::render(S32 pass)  	}  	else if (LLGLSLShader::sNoFixedFunction)  	{ //just use the UI shader (generic single texture no lighting) -		gUIProgram.bind(); +		gOneTextureNoColorProgram.bind();  	}  	else  	{ @@ -118,7 +118,7 @@ void LLDrawPoolSky::render(S32 pass)  	S32 face_count = (S32)mDrawFace.size();  	LLVertexBuffer::unbind(); -	glColor4f(1,1,1,1); +	gGL.diffuseColor4f(1,1,1,1);  	for (S32 i = 0; i < llmin(6, face_count); ++i)  	{ @@ -146,7 +146,7 @@ void LLDrawPoolSky::renderSkyCubeFace(U8 side)  		LLGLEnable blend(GL_BLEND);  		mSkyTex[side].bindTexture(FALSE); -		glColor4f(1, 1, 1, LLSkyTex::getInterpVal()); // lighting is disabled +		gGL.diffuseColor4f(1, 1, 1, LLSkyTex::getInterpVal()); // lighting is disabled  		face.renderIndexed();  	}  } diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp index 3daa0f8261..8d6b31912a 100644 --- a/indra/newview/lldrawpoolterrain.cpp +++ b/indra/newview/lldrawpoolterrain.cpp @@ -106,6 +106,10 @@ U32 LLDrawPoolTerrain::getVertexDataMask()  	{  		return LLVertexBuffer::MAP_VERTEX;  	} +	else if (LLGLSLShader::sCurBoundShaderPtr) +	{ +		return VERTEX_DATA_MASK & ~(LLVertexBuffer::MAP_TEXCOORD2 | LLVertexBuffer::MAP_TEXCOORD3); +	}  	else  	{  		return VERTEX_DATA_MASK;  diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp index a6e0151114..50a52ac4cf 100644 --- a/indra/newview/lldrawpooltree.cpp +++ b/indra/newview/lldrawpooltree.cpp @@ -65,17 +65,18 @@ void LLDrawPoolTree::beginRenderPass(S32 pass)  	if (LLPipeline::sUnderWaterRender)  	{ -		shader = &gObjectAlphaMaskNonIndexedWaterProgram; +		shader = &gTreeWaterProgram;  	}  	else  	{ -		shader = &gObjectAlphaMaskNonIndexedProgram; +		shader = &gTreeProgram;  	}  	if (gPipeline.canUseVertexShaders())  	{  		shader->bind();  		shader->setAlphaRange(0.5f, 1.f); +		gGL.diffuseColor4f(1,1,1,1);  	}  	else  	{ diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp index 31c14361b5..ae1598907b 100644 --- a/indra/newview/lldrawpoolwater.cpp +++ b/indra/newview/lldrawpoolwater.cpp @@ -219,7 +219,7 @@ void LLDrawPoolWater::render(S32 pass)  		water_color.setVec(1.f, 1.f, 1.f, 0.5f*(1.f + up_dot));  	} -	glColor4fv(water_color.mV); +	gGL.diffuseColor4fv(water_color.mV);  	// Automatically generate texture coords for detail map  	glEnable(GL_TEXTURE_GEN_S); //texture unit 1 @@ -383,7 +383,7 @@ void LLDrawPoolWater::renderOpaqueLegacyWater()  	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0);  	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1); -	glColor3f(1.f, 1.f, 1.f); +	gGL.diffuseColor3f(1.f, 1.f, 1.f);  	for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();  		 iter != mDrawFace.end(); iter++) @@ -623,8 +623,6 @@ void LLDrawPoolWater::shade()  		water_color.mV[3] = 0.9f;  	} -	glColor4fv(water_color.mV); -  	{  		LLGLEnable depth_clamp(gGLManager.mHasDepthClamp ? GL_DEPTH_CLAMP : 0);  		LLGLDisable cullface(GL_CULL_FACE); diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp index 79a835fd14..e4de92490e 100644 --- a/indra/newview/lldrawpoolwlsky.cpp +++ b/indra/newview/lldrawpoolwlsky.cpp @@ -100,12 +100,12 @@ void LLDrawPoolWLSky::beginRenderPass( S32 pass )  {  	sky_shader =  		LLPipeline::sUnderWaterRender ? -			&gObjectSimpleWaterProgram : +			&gObjectFullbrightNoColorWaterProgram :  			&gWLSkyProgram;  	cloud_shader =  			LLPipeline::sUnderWaterRender ? -				&gObjectSimpleWaterProgram : +				&gObjectFullbrightNoColorWaterProgram :  				&gWLCloudProgram;  } diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp index f781d5f3ff..799866091b 100644 --- a/indra/newview/lldynamictexture.cpp +++ b/indra/newview/lldynamictexture.cpp @@ -40,6 +40,7 @@  #include "llvertexbuffer.h"  #include "llviewerdisplay.h"  #include "llrender.h" +#include "llglslshader.h"  // static  LLViewerDynamicTexture::instance_list_t LLViewerDynamicTexture::sInstances[ LLViewerDynamicTexture::ORDER_COUNT ]; @@ -206,6 +207,12 @@ BOOL LLViewerDynamicTexture::updateAllInstances()  		return TRUE;  	} +	LLGLSLShader::bindNoShader(); +	LLVertexBuffer::unbind(); +	//allow fixed function when rendering dynamic textures +	bool no_fixed = LLGLSLShader::sNoFixedFunction; +	LLGLSLShader::sNoFixedFunction = false; +  	BOOL result = FALSE;  	BOOL ret = FALSE ;  	for( S32 order = 0; order < ORDER_COUNT; order++ ) @@ -236,6 +243,7 @@ BOOL LLViewerDynamicTexture::updateAllInstances()  		}  	} +	LLGLSLShader::sNoFixedFunction = no_fixed;  	return ret;  } diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 432e61f6d8..f5a8013f4d 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -362,8 +362,8 @@ void LLFace::setSize(S32 num_vertices, S32 num_indices, bool align)  {  	if (align)  	{ -		//allocate vertices in blocks of 4 for alignment -		num_vertices = (num_vertices + 0x3) & ~0x3; +		//allocate vertices in blocks of 16 for alignment +		num_vertices = (num_vertices + 0xF) & ~0xF;  	}  	if (mGeomCount != num_vertices || @@ -503,7 +503,7 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)  			glMultMatrixf((GLfloat*)mDrawablep->getRegion()->mRenderMatrix.mMatrix);  		} -		glColor4fv(color.mV); +		gGL.diffuseColor4fv(color.mV);  		if (mDrawablep->isState(LLDrawable::RIGGED))  		{ @@ -1055,6 +1055,7 @@ static LLFastTimer::DeclareTimer FTM_FACE_GEOM_POSITION("Position");  static LLFastTimer::DeclareTimer FTM_FACE_GEOM_NORMAL("Normal");  static LLFastTimer::DeclareTimer FTM_FACE_GEOM_TEXTURE("Texture");  static LLFastTimer::DeclareTimer FTM_FACE_GEOM_COLOR("Color"); +static LLFastTimer::DeclareTimer FTM_FACE_GEOM_EMISSIVE("Emissive");  static LLFastTimer::DeclareTimer FTM_FACE_GEOM_WEIGHTS("Weights");  static LLFastTimer::DeclareTimer FTM_FACE_GEOM_BINORMAL("Binormal");  static LLFastTimer::DeclareTimer FTM_FACE_GEOM_INDEX("Index"); @@ -1124,6 +1125,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  	bool rebuild_pos = full_rebuild || mDrawablep->isState(LLDrawable::REBUILD_POSITION);  	bool rebuild_color = full_rebuild || mDrawablep->isState(LLDrawable::REBUILD_COLOR); +	bool rebuild_emissive = rebuild_color && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_EMISSIVE);  	bool rebuild_tcoord = full_rebuild || mDrawablep->isState(LLDrawable::REBUILD_TCOORD);  	bool rebuild_normal = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_NORMAL);  	bool rebuild_binormal = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_BINORMAL); @@ -1758,6 +1760,44 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		}  	} +	if (rebuild_emissive) +	{ +		LLFastTimer t(FTM_FACE_GEOM_EMISSIVE); +		LLStrider<U8> emissive; +		mVertexBuffer->getEmissiveStrider(emissive, mGeomIndex, mGeomCount, map_range); + +		U8 glow = (U8) llclamp((S32) (getTextureEntry()->getGlow()*255), 0, 255); + +		LLVector4a src; + +		 +		U32 glow32 = glow | +					 (glow << 8) | +					 (glow << 16) | +					 (glow << 24); + +		U32 vec[4]; +		vec[0] = vec[1] = vec[2] = vec[3] = glow32; +		 +		src.loadua((F32*) vec); + +		LLVector4a* dst = (LLVector4a*) emissive.get(); +		S32 num_vecs = num_vertices/16; +		if (num_vertices%16 > 0) +		{ +			++num_vecs; +		} + +		for (S32 i = 0; i < num_vecs; i++) +		{	 +			dst[i] = src; +		} + +		if (map_range) +		{ +			mVertexBuffer->setBuffer(0); +		} +	}  	if (rebuild_tcoord)  	{  		mTexExtents[0].setVec(0,0); @@ -2095,7 +2135,7 @@ void LLFace::renderSetColor() const  	{  		const LLColor4* color = &(getRenderColor()); -		glColor4fv(color->mV); +		gGL.diffuseColor4fv(color->mV);  	}  } diff --git a/indra/newview/llface.h b/indra/newview/llface.h index b5eaeecd60..82e4ab61b7 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -329,13 +329,9 @@ public:  			{  				return lhs->getTexture() < rhs->getTexture();  			} -			else if (lte->getBumpShinyFullbright() != rte->getBumpShinyFullbright()) -			{ -				return lte->getBumpShinyFullbright() < rte->getBumpShinyFullbright(); -			}  			else   			{ -				return lte->getGlow() < rte->getGlow(); +				return lte->getBumpShinyFullbright() < rte->getBumpShinyFullbright();  			}  		}  	}; diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp index e4d8e3513d..dc4c15316a 100644 --- a/indra/newview/llfloaterimagepreview.cpp +++ b/indra/newview/llfloaterimagepreview.cpp @@ -691,7 +691,7 @@ BOOL LLImagePreviewAvatar::render()  	LLVertexBuffer::unbind();  	avatarp->updateLOD(); - +	  	if (avatarp->mDrawable.notNull())  	{  		LLGLDepthTest gls_depth(GL_TRUE, GL_TRUE); @@ -699,7 +699,7 @@ BOOL LLImagePreviewAvatar::render()  		LLGLDisable no_blend(GL_BLEND);  		LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)avatarp->mDrawable->getFace(0)->getPool(); -		 +		gPipeline.enableLightsPreview();  		avatarPoolp->renderAvatars(avatarp);  // renders only one avatar  	} diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index ab6753b4be..9f9bbee4b5 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -4826,7 +4826,7 @@ BOOL LLModelPreview::render()  					if (textures)  					{ -						glColor4fv(instance.mMaterial[i].mDiffuseColor.mV); +						gGL.diffuseColor4fv(instance.mMaterial[i].mDiffuseColor.mV);  						if (i < instance.mMaterial.size() && instance.mMaterial[i].mDiffuseMap.notNull())  						{  							if (instance.mMaterial[i].mDiffuseMap->getDiscardLevel() > -1) @@ -4838,12 +4838,12 @@ BOOL LLModelPreview::render()  					}  					else  					{ -						glColor4f(1,1,1,1); +						gGL.diffuseColor4f(1,1,1,1);  					}  					buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0);  					gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); -					glColor3f(0.4f, 0.4f, 0.4f); +					gGL.diffuseColor3f(0.4f, 0.4f, 0.4f);  					if (edges)  					{ @@ -4945,11 +4945,11 @@ BOOL LLModelPreview::render()  							buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0);  							gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); -							glColor4f(0.4f, 0.4f, 0.0f, 0.4f); +							gGL.diffuseColor4f(0.4f, 0.4f, 0.0f, 0.4f);  							buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0); -							glColor3f(1.f, 1.f, 0.f); +							gGL.diffuseColor3f(1.f, 1.f, 0.f);  							glLineWidth(2.f);  							glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); @@ -4969,7 +4969,7 @@ BOOL LLModelPreview::render()  				//show degenerate triangles  				LLGLDepthTest depth(GL_TRUE, GL_TRUE, GL_ALWAYS);  				LLGLDisable cull(GL_CULL_FACE); -				glColor4f(1.f,0.f,0.f,1.f); +				gGL.diffuseColor4f(1.f,0.f,0.f,1.f);  				const LLVector4a scale(0.5f);  				for (LLMeshUploadThread::instance_list::iterator iter = mUploadData.begin(); iter != mUploadData.end(); ++iter) @@ -5133,10 +5133,10 @@ BOOL LLModelPreview::render()  							}  							buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0); -							glColor4fv(instance.mMaterial[i].mDiffuseColor.mV); +							gGL.diffuseColor4fv(instance.mMaterial[i].mDiffuseColor.mV);  							gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);  							buffer->draw(LLRender::TRIANGLES, buffer->getNumIndices(), 0); -							glColor3f(0.4f, 0.4f, 0.4f); +							gGL.diffuseColor3f(0.4f, 0.4f, 0.4f);  							if (edges)  							{ diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp index 85e0043651..d10f6562f7 100644 --- a/indra/newview/llmanip.cpp +++ b/indra/newview/llmanip.cpp @@ -466,11 +466,11 @@ void LLManip::renderXYZ(const LLVector3 &vec)  		feedback_string = llformat("X: %.3f", vec.mV[VX]);  		hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *font, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -102.f, (F32)vertical_offset, LLColor4(1.f, 0.5f, 0.5f, 1.f), FALSE); -		glColor3f(0.5f, 1.f, 0.5f); +		gGL.diffuseColor3f(0.5f, 1.f, 0.5f);  		feedback_string = llformat("Y: %.3f", vec.mV[VY]);  		hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *font, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -27.f, (F32)vertical_offset, LLColor4(0.5f, 1.f, 0.5f, 1.f), FALSE); -		glColor3f(0.5f, 0.5f, 1.f); +		gGL.diffuseColor3f(0.5f, 0.5f, 1.f);  		feedback_string = llformat("Z: %.3f", vec.mV[VZ]);  		hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *font, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, 48.f, (F32)vertical_offset, LLColor4(0.5f, 0.5f, 1.f, 1.f), FALSE);  	} diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index f871df0c36..c4f8369cd0 100644 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -1665,7 +1665,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,  		glStencilFunc(GL_ALWAYS, 0, stencil_mask);  		gGL.setColorMask(false, false);  		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); -		glColor4f(1,1,1,1); +		gGL.diffuseColor4f(1,1,1,1);  		//setup clip plane  		normal = normal * grid_rotation; @@ -2239,7 +2239,7 @@ void LLManipTranslate::renderArrow(S32 which_arrow, S32 selected_arrow, F32 box_  			break;  		} -		glColor4fv(color.mV); +		gGL.diffuseColor4fv(color.mV);  		glRotatef(rot, axis.mV[0], axis.mV[1], axis.mV[2]);  		glScalef(mArrowScales.mV[index], mArrowScales.mV[index], mArrowScales.mV[index] * 1.5f); diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index 18d6731fcb..3ff5a05d81 100644 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -169,7 +169,7 @@ void LLPreviewTexture::draw()  				saveAs();  			}  			// Draw the texture -			glColor3f( 1.f, 1.f, 1.f ); +			gGL.diffuseColor3f( 1.f, 1.f, 1.f );  			gl_draw_scaled_image(interior.mLeft,  								interior.mBottom,  								interior.getWidth(), diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 26b2b0f5c3..8aa24e9261 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -5638,7 +5638,7 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color)  		LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL);  		gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);  		{ -			glColor4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f); +			gGL.diffuseColor4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f);  			pushWireframe(drawable);  		}  	} @@ -5646,7 +5646,7 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color)  	gGL.flush();  	gGL.setSceneBlendType(LLRender::BT_ALPHA); -	glColor4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2); +	gGL.diffuseColor4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2);  	LLGLEnable offset(GL_POLYGON_OFFSET_LINE);  	glPolygonOffset(3.f, 3.f);  	glLineWidth(3.f); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index e23b431457..064eaa49dd 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -2503,7 +2503,7 @@ void pushVertsColorCoded(LLSpatialGroup* group, U32 mask)  		{  			params = *j;  			LLRenderPass::applyModelMatrix(*params); -			glColor4f(colors[col].mV[0], colors[col].mV[1], colors[col].mV[2], 0.5f); +			gGL.diffuseColor4f(colors[col].mV[0], colors[col].mV[1], colors[col].mV[2], 0.5f);  			params->mVertexBuffer->setBuffer(mask);  			params->mVertexBuffer->drawRange(params->mParticle ? LLRender::POINTS : LLRender::TRIANGLES,  				params->mStart, params->mEnd, params->mCount, params->mOffset); @@ -2560,11 +2560,11 @@ void renderOctree(LLSpatialGroup* group)  					{  						if (gFrameTimeSeconds - face->mLastUpdateTime < 0.5f)  						{ -							glColor4f(0, 1, 0, group->mBuilt); +							gGL.diffuseColor4f(0, 1, 0, group->mBuilt);  						}  						else if (gFrameTimeSeconds - face->mLastMoveTime < 0.5f)  						{ -							glColor4f(1, 0, 0, group->mBuilt); +							gGL.diffuseColor4f(1, 0, 0, group->mBuilt);  						}  						else  						{ @@ -2661,7 +2661,7 @@ void renderVisibility(LLSpatialGroup* group, LLCamera* camera)  	if (render_objects)  	{  		LLGLDepthTest depth_under(GL_TRUE, GL_FALSE, GL_GREATER); -		glColor4f(0, 0.5f, 0, 0.5f); +		gGL.diffuseColor4f(0, 0.5f, 0, 0.5f);  		gGL.color4f(0, 0.5f, 0, 0.5f);  		pushBufferVerts(group, LLVertexBuffer::MAP_VERTEX);  	} @@ -2671,7 +2671,7 @@ void renderVisibility(LLSpatialGroup* group, LLCamera* camera)  		if (render_objects)  		{ -			glColor4f(0.f, 0.5f, 0.f,1.f); +			gGL.diffuseColor4f(0.f, 0.5f, 0.f,1.f);  			gGL.color4f(0.f, 0.5f, 0.f, 1.f);  			pushBufferVerts(group, LLVertexBuffer::MAP_VERTEX);  		} @@ -2680,7 +2680,7 @@ void renderVisibility(LLSpatialGroup* group, LLCamera* camera)  		if (render_objects)  		{ -			glColor4f(0.f, 0.75f, 0.f,0.5f); +			gGL.diffuseColor4f(0.f, 0.75f, 0.f,0.5f);  			gGL.color4f(0.f, 0.75f, 0.f, 0.5f);  			pushBufferVerts(group, LLVertexBuffer::MAP_VERTEX);  		} @@ -2689,11 +2689,11 @@ void renderVisibility(LLSpatialGroup* group, LLCamera* camera)  			LLVertexBuffer::unbind();  			group->mOcclusionVerts->setBuffer(LLVertexBuffer::MAP_VERTEX); -			glColor4f(1.0f, 0.f, 0.f, 0.5f); +			gGL.diffuseColor4f(1.0f, 0.f, 0.f, 0.5f);  			group->mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, get_box_fan_indices(camera, group->mBounds[0]));  			glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); -			glColor4f(1.0f, 1.f, 1.f, 1.0f); +			gGL.diffuseColor4f(1.0f, 1.f, 1.f, 1.0f);  			group->mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, get_box_fan_indices(camera, group->mBounds[0]));  			glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);  		}*/ @@ -2726,23 +2726,23 @@ void renderUpdateType(LLDrawable* drawablep)  	switch (vobj->getLastUpdateType())  	{  	case OUT_FULL: -		glColor4f(0,1,0,0.5f); +		gGL.diffuseColor4f(0,1,0,0.5f);  		break;  	case OUT_TERSE_IMPROVED: -		glColor4f(0,1,1,0.5f); +		gGL.diffuseColor4f(0,1,1,0.5f);  		break;  	case OUT_FULL_COMPRESSED:  		if (vobj->getLastUpdateCached())  		{ -			glColor4f(1,0,0,0.5f); +			gGL.diffuseColor4f(1,0,0,0.5f);  		}  		else  		{ -			glColor4f(1,1,0,0.5f); +			gGL.diffuseColor4f(1,1,0,0.5f);  		}  		break;  	case OUT_FULL_CACHED: -		glColor4f(0,0,1,0.5f); +		gGL.diffuseColor4f(0,0,1,0.5f);  		break;  	default:  		llwarns << "Unknown update_type " << vobj->getLastUpdateType() << llendl; @@ -2936,7 +2936,7 @@ void renderMeshBaseHull(LLVOVolume* volume, U32 data_mask, LLColor4& color, LLCo  	{		  		if (!decomp->mBaseHullMesh.empty())  		{ -			glColor4fv(color.mV); +			gGL.diffuseColor4fv(color.mV);  			LLVertexBuffer::drawArrays(LLRender::TRIANGLES, decomp->mBaseHullMesh.mPositions, decomp->mBaseHullMesh.mNormals);  		}  		else @@ -2956,13 +2956,13 @@ void renderMeshBaseHull(LLVOVolume* volume, U32 data_mask, LLColor4& color, LLCo  void render_hull(LLModel::PhysicsMesh& mesh, const LLColor4& color, const LLColor4& line_color)  { -	glColor4fv(color.mV); +	gGL.diffuseColor4fv(color.mV);  	LLVertexBuffer::drawArrays(LLRender::TRIANGLES, mesh.mPositions, mesh.mNormals);  	LLGLEnable offset(GL_POLYGON_OFFSET_LINE);  	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);  	glPolygonOffset(3.f, 3.f);  	glLineWidth(3.f); -	glColor4fv(line_color.mV); +	gGL.diffuseColor4fv(line_color.mV);  	LLVertexBuffer::drawArrays(LLRender::TRIANGLES, mesh.mPositions, mesh.mNormals);  	glLineWidth(1.f);  	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); @@ -3044,11 +3044,11 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)  			else if (!decomp->mPhysicsShapeMesh.empty())  			{   				//decomp has physics mesh, render that mesh -				glColor4fv(color.mV); +				gGL.diffuseColor4fv(color.mV);  				LLVertexBuffer::drawArrays(LLRender::TRIANGLES, decomp->mPhysicsShapeMesh.mPositions, decomp->mPhysicsShapeMesh.mNormals);  				glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); -				glColor4fv(line_color.mV); +				gGL.diffuseColor4fv(line_color.mV);  				LLVertexBuffer::drawArrays(LLRender::TRIANGLES, decomp->mPhysicsShapeMesh.mPositions, decomp->mPhysicsShapeMesh.mNormals);  				glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);  			} @@ -3174,7 +3174,7 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)  				glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); -				glColor4fv(line_color.mV); +				gGL.diffuseColor4fv(line_color.mV);  				LLVertexBuffer::unbind();  				llassert(!LLGLSLShader::sNoFixedFunction || LLGLSLShader::sCurBoundShader != 0); @@ -3182,7 +3182,7 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)  				glVertexPointer(3, GL_FLOAT, 16, phys_volume->mHullPoints);  				glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices); -				glColor4fv(color.mV); +				gGL.diffuseColor4fv(color.mV);  				glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);  				glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices);  			} @@ -3216,7 +3216,7 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)  		volume_params.setShear	( 0, 0 );  		LLVolume* sphere = LLPrimitive::sVolumeManager->refVolume(volume_params, 3); -		glColor4fv(color.mV); +		gGL.diffuseColor4fv(color.mV);  		pushVerts(sphere);  		LLPrimitive::sVolumeManager->unrefVolume(sphere);  	} @@ -3230,7 +3230,7 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)  		volume_params.setShear	( 0, 0 );  		LLVolume* cylinder = LLPrimitive::sVolumeManager->refVolume(volume_params, 3); -		glColor4fv(color.mV); +		gGL.diffuseColor4fv(color.mV);  		pushVerts(cylinder);  		LLPrimitive::sVolumeManager->unrefVolume(cylinder);  	} @@ -3242,10 +3242,10 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)  		LLVolume* phys_volume = LLPrimitive::sVolumeManager->refVolume(volume_params, detail);  		glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); -		glColor4fv(line_color.mV); +		gGL.diffuseColor4fv(line_color.mV);  		pushVerts(phys_volume); -		glColor4fv(color.mV); +		gGL.diffuseColor4fv(color.mV);  		glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);  		pushVerts(phys_volume);  		LLPrimitive::sVolumeManager->unrefVolume(phys_volume); @@ -3263,10 +3263,10 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)  			llassert(!LLGLSLShader::sNoFixedFunction || LLGLSLShader::sCurBoundShader != 0);  			LLVertexBuffer::unbind();  			glVertexPointer(3, GL_FLOAT, 16, phys_volume->mHullPoints); -			glColor4fv(line_color.mV); +			gGL.diffuseColor4fv(line_color.mV);  			glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices); -			glColor4fv(color.mV); +			gGL.diffuseColor4fv(color.mV);  			glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);  			glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices);			  		} @@ -3290,10 +3290,10 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)  	gGL.popMatrix();  	/*{ //analytical shape, just push visual rep. -		glColor3fv(color.mV); +		gGL.diffuseColor3fv(color.mV);  		glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);  		pushVerts(drawable, data_mask); -		glColor4fv(color.mV); +		gGL.diffuseColor4fv(color.mV);  		glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);  		pushVerts(drawable, data_mask);  	}*/ @@ -3335,10 +3335,10 @@ void renderPhysicsShapes(LLSpatialGroup* group)  						glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);  						buff->setBuffer(LLVertexBuffer::MAP_VERTEX); -						glColor3f(0.2f, 0.5f, 0.3f); +						gGL.diffuseColor3f(0.2f, 0.5f, 0.3f);  						buff->draw(LLRender::TRIANGLES, buff->getRequestedIndices(), 0); -						glColor3f(0.2f, 1.f, 0.3f); +						gGL.diffuseColor3f(0.2f, 1.f, 0.3f);  						glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);  						buff->draw(LLRender::TRIANGLES, buff->getRequestedIndices(), 0);  					} @@ -3430,7 +3430,7 @@ void renderTextureAnim(LLDrawInfo* params)  	}  	LLGLEnable blend(GL_BLEND); -	glColor4f(1,1,0,0.5f); +	gGL.diffuseColor4f(1,1,0,0.5f);  	pushVerts(params, LLVertexBuffer::MAP_VERTEX);  } @@ -3456,22 +3456,22 @@ void renderShadowFrusta(LLDrawInfo* params)  	if (gPipeline.mShadowCamera[4].AABBInFrustum(center, size))  	{ -		glColor3f(1,0,0); +		gGL.diffuseColor3f(1,0,0);  		pushVerts(params, LLVertexBuffer::MAP_VERTEX);  	}  	if (gPipeline.mShadowCamera[5].AABBInFrustum(center, size))  	{ -		glColor3f(0,1,0); +		gGL.diffuseColor3f(0,1,0);  		pushVerts(params, LLVertexBuffer::MAP_VERTEX);  	}  	if (gPipeline.mShadowCamera[6].AABBInFrustum(center, size))  	{ -		glColor3f(0,0,1); +		gGL.diffuseColor3f(0,0,1);  		pushVerts(params, LLVertexBuffer::MAP_VERTEX);  	}  	if (gPipeline.mShadowCamera[7].AABBInFrustum(center, size))  	{ -		glColor3f(1,0,1); +		gGL.diffuseColor3f(1,0,1);  		pushVerts(params, LLVertexBuffer::MAP_VERTEX);  	} @@ -3489,7 +3489,7 @@ void renderLights(LLDrawable* drawablep)  	if (drawablep->getNumFaces())  	{  		LLGLEnable blend(GL_BLEND); -		glColor4f(0,1,1,0.5f); +		gGL.diffuseColor4f(0,1,1,0.5f);  		for (S32 i = 0; i < drawablep->getNumFaces(); i++)  		{ @@ -3657,7 +3657,7 @@ void renderRaycast(LLDrawable* drawablep)  					{  						//render face positions  						LLVertexBuffer::unbind(); -						glColor4f(0,1,1,0.5f); +						gGL.diffuseColor4f(0,1,1,0.5f);  						glVertexPointer(3, GL_FLOAT, sizeof(LLVector4a), face.mPositions);  						glDrawElements(GL_TRIANGLES, face.mNumIndices, GL_UNSIGNED_SHORT, face.mIndices);  					} diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index 54d5d36f6e..077d0fed65 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -93,7 +93,6 @@ public:  	LLPointer<LLViewerTexture>     mTexture;  	std::vector<LLPointer<LLViewerTexture> > mTextureList; -	LLColor4U mGlowColor;  	S32 mDebugColor;  	const LLMatrix4* mTextureMatrix;  	const LLMatrix4* mModelMatrix; diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index e8abee2fb7..87e7a57ae8 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -295,6 +295,8 @@ BOOL LLTexLayerSetBuffer::render()  	BOOL success = TRUE; +	LLVertexBuffer::unbind(); +  	//hack to use fixed function when updating tex layer sets  	bool no_ff = LLGLSLShader::sNoFixedFunction;  	LLGLSLShader::sNoFixedFunction = false; @@ -304,6 +306,7 @@ BOOL LLTexLayerSetBuffer::render()  	success &= mTexLayerSet->render( mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight );  	gGL.flush(); +	LLVertexBuffer::unbind();  	LLGLSLShader::sNoFixedFunction = no_ff;  	if(upload_now) diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index 0115115a23..f4b01a6bab 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -571,7 +571,7 @@ void LLGLTexMemBar::draw()  	color = (total_mem < llfloor(max_total_mem * texmem_lower_bound_scale)) ? LLColor4::green :  		  	(total_mem < max_total_mem) ? LLColor4::yellow : LLColor4::red;  	color[VALPHA] = .75f; -	glColor4fv(color.mV); +	gGL.diffuseColor4fv(color.mV);  	gl_rect_2d(left, top, right, bottom); // red/yellow/green @@ -594,7 +594,7 @@ void LLGLTexMemBar::draw()  	color = (bound_mem < llfloor(max_bound_mem * texmem_lower_bound_scale)) ? LLColor4::green :  		  	(bound_mem < max_bound_mem) ? LLColor4::yellow : LLColor4::red;  	color[VALPHA] = .75f; -	glColor4fv(color.mV); +	gGL.diffuseColor4fv(color.mV);  	gl_rect_2d(left, top, right, bottom);  #else diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp index 77c8bb0329..5e4c124c45 100644 --- a/indra/newview/llviewerjointmesh.cpp +++ b/indra/newview/llviewerjointmesh.cpp @@ -527,9 +527,9 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy)  	// setup current color  	//----------------------------------------------------------------  	if (is_dummy) -		glColor4fv(LLVOAvatar::getDummyColor().mV); +		gGL.diffuseColor4fv(LLVOAvatar::getDummyColor().mV);  	else -		glColor4fv(mColor.mV); +		gGL.diffuseColor4fv(mColor.mV);  	stop_glerror(); @@ -547,11 +547,11 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy)  		if (mIsTransparent)  		{ -			glColor4f(1.f, 1.f, 1.f, 1.f); +			gGL.diffuseColor4f(1.f, 1.f, 1.f, 1.f);  		}  		else  		{ -			glColor4f(0.7f, 0.6f, 0.3f, 1.f); +			gGL.diffuseColor4f(0.7f, 0.6f, 0.3f, 1.f);  			gGL.getTexUnit(diffuse_channel)->setTextureColorBlend(LLTexUnit::TBO_LERP_TEX_ALPHA, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);  		}  	} @@ -582,13 +582,16 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy)  		gGL.getTexUnit(diffuse_channel)->bind(LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT));  	} -	mFace->getVertexBuffer()->setBuffer(sRenderMask); +	 +	U32 mask = sRenderMask;  	U32 start = mMesh->mFaceVertexOffset;  	U32 end = start + mMesh->mFaceVertexCount - 1;  	U32 count = mMesh->mFaceIndexCount;  	U32 offset = mMesh->mFaceIndexOffset; +	LLVertexBuffer* buff = mFace->getVertexBuffer(); +  	if (mMesh->hasWeights())  	{  		if ((mFace->getPool()->getVertexShaderLevel() > 0)) @@ -597,16 +600,23 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy)  			{  				uploadJointMatrices();  			} +			mask = mask | LLVertexBuffer::MAP_WEIGHT; +			if (mFace->getPool()->getVertexShaderLevel() > 1) +			{ +				mask = mask | LLVertexBuffer::MAP_CLOTHWEIGHT; +			}  		} -		mFace->getVertexBuffer()->drawRange(LLRender::TRIANGLES, start, end, count, offset); +		buff->setBuffer(mask); +		buff->drawRange(LLRender::TRIANGLES, start, end, count, offset);  	}  	else  	{  		glPushMatrix();  		LLMatrix4 jointToWorld = getWorldMatrix();  		glMultMatrixf((GLfloat*)jointToWorld.mMatrix); -		mFace->getVertexBuffer()->drawRange(LLRender::TRIANGLES, start, end, count, offset); +		buff->setBuffer(mask); +		buff->drawRange(LLRender::TRIANGLES, start, end, count, offset);  		glPopMatrix();  	}  	gPipeline.addTrianglesDrawn(count); diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index fa8d43e0b2..8684322eef 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -66,6 +66,7 @@ LLGLSLShader	gOcclusionProgram;  LLGLSLShader	gCustomAlphaProgram;  LLGLSLShader	gGlowCombineProgram;  LLGLSLShader	gTwoTextureAddProgram; +LLGLSLShader	gOneTextureNoColorProgram;  //object shaders  LLGLSLShader		gObjectSimpleProgram; @@ -74,6 +75,8 @@ LLGLSLShader		gObjectSimpleAlphaMaskProgram;  LLGLSLShader		gObjectSimpleWaterAlphaMaskProgram;  LLGLSLShader		gObjectFullbrightProgram;  LLGLSLShader		gObjectFullbrightWaterProgram; +LLGLSLShader		gObjectEmissiveProgram; +LLGLSLShader		gObjectEmissiveWaterProgram;  LLGLSLShader		gObjectFullbrightAlphaMaskProgram;  LLGLSLShader		gObjectFullbrightWaterAlphaMaskProgram;  LLGLSLShader		gObjectFullbrightShinyProgram; @@ -81,11 +84,17 @@ LLGLSLShader		gObjectFullbrightShinyWaterProgram;  LLGLSLShader		gObjectShinyProgram;  LLGLSLShader		gObjectShinyWaterProgram;  LLGLSLShader		gObjectBumpProgram; +LLGLSLShader		gTreeProgram; +LLGLSLShader		gTreeWaterProgram; +LLGLSLShader		gObjectFullbrightNoColorProgram; +LLGLSLShader		gObjectFullbrightNoColorWaterProgram;  LLGLSLShader		gObjectSimpleNonIndexedProgram;  LLGLSLShader		gObjectSimpleNonIndexedWaterProgram;  LLGLSLShader		gObjectAlphaMaskNonIndexedProgram;  LLGLSLShader		gObjectAlphaMaskNonIndexedWaterProgram; +LLGLSLShader		gObjectAlphaMaskNoColorProgram; +LLGLSLShader		gObjectAlphaMaskNoColorWaterProgram;  LLGLSLShader		gObjectFullbrightNonIndexedProgram;  LLGLSLShader		gObjectFullbrightNonIndexedWaterProgram;  LLGLSLShader		gObjectFullbrightShinyNonIndexedProgram; @@ -123,6 +132,7 @@ LLGLSLShader		gAvatarPickProgram;  LLGLSLShader			gWLSkyProgram;  LLGLSLShader			gWLCloudProgram; +  // Effects Shaders  LLGLSLShader			gGlowProgram;  LLGLSLShader			gGlowExtractProgram; @@ -186,14 +196,19 @@ LLViewerShaderMgr::LLViewerShaderMgr() :  	mShaderList.push_back(&gWaterProgram);  	mShaderList.push_back(&gAvatarEyeballProgram);   	mShaderList.push_back(&gObjectSimpleProgram); +	mShaderList.push_back(&gObjectFullbrightNoColorProgram); +	mShaderList.push_back(&gObjectFullbrightNoColorWaterProgram);  	mShaderList.push_back(&gObjectSimpleAlphaMaskProgram);  	mShaderList.push_back(&gObjectBumpProgram);  	mShaderList.push_back(&gUIProgram);  	mShaderList.push_back(&gCustomAlphaProgram);  	mShaderList.push_back(&gGlowCombineProgram);  	mShaderList.push_back(&gTwoTextureAddProgram); +	mShaderList.push_back(&gOneTextureNoColorProgram);  	mShaderList.push_back(&gSolidColorProgram);  	mShaderList.push_back(&gOcclusionProgram); +	mShaderList.push_back(&gObjectEmissiveProgram); +	mShaderList.push_back(&gObjectEmissiveWaterProgram);  	mShaderList.push_back(&gObjectFullbrightProgram);  	mShaderList.push_back(&gObjectFullbrightAlphaMaskProgram);  	mShaderList.push_back(&gObjectFullbrightShinyProgram); @@ -202,6 +217,10 @@ LLViewerShaderMgr::LLViewerShaderMgr() :  	mShaderList.push_back(&gObjectSimpleNonIndexedWaterProgram);  	mShaderList.push_back(&gObjectAlphaMaskNonIndexedProgram);  	mShaderList.push_back(&gObjectAlphaMaskNonIndexedWaterProgram); +	mShaderList.push_back(&gObjectAlphaMaskNoColorProgram); +	mShaderList.push_back(&gObjectAlphaMaskNoColorWaterProgram); +	mShaderList.push_back(&gTreeProgram); +	mShaderList.push_back(&gTreeWaterProgram);  	mShaderList.push_back(&gObjectFullbrightNonIndexedProgram);  	mShaderList.push_back(&gObjectFullbrightNonIndexedWaterProgram);  	mShaderList.push_back(&gObjectFullbrightShinyNonIndexedProgram); @@ -266,19 +285,24 @@ void LLViewerShaderMgr::initAttribsAndUniforms(void)  {  	if (mReservedAttribs.empty())  	{ -		mReservedAttribs.push_back("materialColor"); -		mReservedAttribs.push_back("specularColor"); +		//MUST match order of enum in LLVertexBuffer.h +		mReservedAttribs.push_back("position"); +		mReservedAttribs.push_back("normal"); +		mReservedAttribs.push_back("texcoord0"); +		mReservedAttribs.push_back("texcoord1"); +		mReservedAttribs.push_back("texcoord2"); +		mReservedAttribs.push_back("texcoord3"); +		mReservedAttribs.push_back("diffuse_color"); +		mReservedAttribs.push_back("emissive");  		mReservedAttribs.push_back("binormal"); -		mReservedAttribs.push_back("object_weight"); - -		mAvatarAttribs.reserve(5); -		mAvatarAttribs.push_back("weight"); -		mAvatarAttribs.push_back("clothing"); -		mAvatarAttribs.push_back("gWindDir"); -		mAvatarAttribs.push_back("gSinWaveParams"); -		mAvatarAttribs.push_back("gGravity"); +		mReservedAttribs.push_back("weight"); +		mReservedAttribs.push_back("weight4"); +		mReservedAttribs.push_back("clothing");  		mAvatarUniforms.push_back("matrixPalette"); +		mAvatarUniforms.push_back("gWindDir"); +		mAvatarUniforms.push_back("gSinWaveParams"); +		mAvatarUniforms.push_back("gGravity");  		mReservedUniforms.reserve(24);  		mReservedUniforms.push_back("diffuseMap"); @@ -444,6 +468,7 @@ void LLViewerShaderMgr::setShaders()  	mMaxAvatarShaderLevel = 0;  	LLGLSLShader::sNoFixedFunction = false; +	LLVertexBuffer::unbind();  	if (LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable")   		&& gSavedSettings.getBOOL("VertexShaderEnable"))  	{ @@ -635,8 +660,11 @@ void LLViewerShaderMgr::unloadShaders()  	gCustomAlphaProgram.unload();  	gGlowCombineProgram.unload();  	gTwoTextureAddProgram.unload(); +	gOneTextureNoColorProgram.unload();  	gSolidColorProgram.unload(); +	gObjectFullbrightNoColorProgram.unload(); +	gObjectFullbrightNoColorWaterProgram.unload();  	gObjectSimpleProgram.unload();  	gObjectSimpleAlphaMaskProgram.unload();  	gObjectBumpProgram.unload(); @@ -644,6 +672,8 @@ void LLViewerShaderMgr::unloadShaders()  	gObjectSimpleWaterAlphaMaskProgram.unload();  	gObjectFullbrightProgram.unload();  	gObjectFullbrightWaterProgram.unload(); +	gObjectEmissiveProgram.unload(); +	gObjectEmissiveWaterProgram.unload();  	gObjectFullbrightAlphaMaskProgram.unload();  	gObjectFullbrightWaterAlphaMaskProgram.unload(); @@ -656,8 +686,12 @@ void LLViewerShaderMgr::unloadShaders()  	gObjectSimpleNonIndexedWaterProgram.unload();  	gObjectAlphaMaskNonIndexedProgram.unload();  	gObjectAlphaMaskNonIndexedWaterProgram.unload(); +	gObjectAlphaMaskNoColorProgram.unload(); +	gObjectAlphaMaskNoColorWaterProgram.unload();  	gObjectFullbrightNonIndexedProgram.unload();  	gObjectFullbrightNonIndexedWaterProgram.unload(); +	gTreeProgram.unload(); +	gTreeWaterProgram.unload();  	gObjectShinyNonIndexedProgram.unload();  	gObjectFullbrightShinyNonIndexedProgram.unload(); @@ -1472,7 +1506,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredAvatarShadowProgram.mShaderFiles.push_back(make_pair("deferred/avatarShadowV.glsl", GL_VERTEX_SHADER_ARB));  		gDeferredAvatarShadowProgram.mShaderFiles.push_back(make_pair("deferred/avatarShadowF.glsl", GL_FRAGMENT_SHADER_ARB));  		gDeferredAvatarShadowProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; -		success = gDeferredAvatarShadowProgram.createShader(&mAvatarAttribs, &mAvatarUniforms); +		success = gDeferredAvatarShadowProgram.createShader(NULL, &mAvatarUniforms);  	}  	if (success) @@ -1504,7 +1538,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredAvatarProgram.mShaderFiles.push_back(make_pair("deferred/avatarV.glsl", GL_VERTEX_SHADER_ARB));  		gDeferredAvatarProgram.mShaderFiles.push_back(make_pair("deferred/avatarF.glsl", GL_FRAGMENT_SHADER_ARB));  		gDeferredAvatarProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; -		success = gDeferredAvatarProgram.createShader(&mAvatarAttribs, &mAvatarUniforms); +		success = gDeferredAvatarProgram.createShader(NULL, &mAvatarUniforms);  	}  	if (success) @@ -1521,7 +1555,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/avatarAlphaV.glsl", GL_VERTEX_SHADER_ARB));  		gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaNonIndexedF.glsl", GL_FRAGMENT_SHADER_ARB));  		gDeferredAvatarAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; -		success = gDeferredAvatarAlphaProgram.createShader(&mAvatarAttribs, &mAvatarUniforms); +		success = gDeferredAvatarAlphaProgram.createShader(NULL, &mAvatarUniforms);  	}  	if (success) @@ -1677,11 +1711,15 @@ BOOL LLViewerShaderMgr::loadShadersObject()  		gObjectFullbrightShinyProgram.unload();  		gObjectFullbrightShinyWaterProgram.unload();  		gObjectShinyWaterProgram.unload(); +		gObjectFullbrightNoColorProgram.unload(); +		gObjectFullbrightNoColorWaterProgram.unload();  		gObjectSimpleProgram.unload();  		gObjectSimpleAlphaMaskProgram.unload();  		gObjectBumpProgram.unload();  		gObjectSimpleWaterProgram.unload();  		gObjectSimpleWaterAlphaMaskProgram.unload(); +		gObjectEmissiveProgram.unload(); +		gObjectEmissiveWaterProgram.unload();  		gObjectFullbrightProgram.unload();  		gObjectFullbrightAlphaMaskProgram.unload();  		gObjectFullbrightWaterProgram.unload(); @@ -1694,6 +1732,8 @@ BOOL LLViewerShaderMgr::loadShadersObject()  		gObjectSimpleNonIndexedWaterProgram.unload();  		gObjectAlphaMaskNonIndexedProgram.unload();  		gObjectAlphaMaskNonIndexedWaterProgram.unload(); +		gObjectAlphaMaskNoColorProgram.unload(); +		gObjectAlphaMaskNoColorWaterProgram.unload();  		gObjectFullbrightNonIndexedProgram.unload();  		gObjectFullbrightNonIndexedWaterProgram.unload();  		gSkinnedObjectSimpleProgram.unload(); @@ -1704,6 +1744,8 @@ BOOL LLViewerShaderMgr::loadShadersObject()  		gSkinnedObjectFullbrightWaterProgram.unload();  		gSkinnedObjectFullbrightShinyWaterProgram.unload();  		gSkinnedObjectShinySimpleWaterProgram.unload(); +		gTreeProgram.unload(); +		gTreeWaterProgram.unload();  		return TRUE;  	} @@ -1752,7 +1794,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()  		gObjectAlphaMaskNonIndexedProgram.mFeatures.disableTextureIndex = true;  		gObjectAlphaMaskNonIndexedProgram.mFeatures.hasAlphaMask = true;  		gObjectAlphaMaskNonIndexedProgram.mShaderFiles.clear(); -		gObjectAlphaMaskNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB)); +		gObjectAlphaMaskNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/simpleNonIndexedV.glsl", GL_VERTEX_SHADER_ARB));  		gObjectAlphaMaskNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB));  		gObjectAlphaMaskNonIndexedProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];  		success = gObjectAlphaMaskNonIndexedProgram.createShader(NULL, NULL); @@ -1769,7 +1811,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()  		gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.disableTextureIndex = true;  		gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.hasAlphaMask = true;  		gObjectAlphaMaskNonIndexedWaterProgram.mShaderFiles.clear(); -		gObjectAlphaMaskNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB)); +		gObjectAlphaMaskNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleNonIndexedV.glsl", GL_VERTEX_SHADER_ARB));  		gObjectAlphaMaskNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB));  		gObjectAlphaMaskNonIndexedWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];  		gObjectAlphaMaskNonIndexedWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; @@ -1778,6 +1820,76 @@ BOOL LLViewerShaderMgr::loadShadersObject()  	if (success)  	{ +		gObjectAlphaMaskNoColorProgram.mName = "No color alpha mask Shader"; +		gObjectAlphaMaskNoColorProgram.mFeatures.calculatesLighting = true; +		gObjectAlphaMaskNoColorProgram.mFeatures.calculatesAtmospherics = true; +		gObjectAlphaMaskNoColorProgram.mFeatures.hasGamma = true; +		gObjectAlphaMaskNoColorProgram.mFeatures.hasAtmospherics = true; +		gObjectAlphaMaskNoColorProgram.mFeatures.hasLighting = true; +		gObjectAlphaMaskNoColorProgram.mFeatures.disableTextureIndex = true; +		gObjectAlphaMaskNoColorProgram.mFeatures.hasAlphaMask = true; +		gObjectAlphaMaskNoColorProgram.mShaderFiles.clear(); +		gObjectAlphaMaskNoColorProgram.mShaderFiles.push_back(make_pair("objects/simpleNoColorV.glsl", GL_VERTEX_SHADER_ARB)); +		gObjectAlphaMaskNoColorProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB)); +		gObjectAlphaMaskNoColorProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +		success = gObjectAlphaMaskNoColorProgram.createShader(NULL, NULL); +	} +	 +	if (success) +	{ +		gObjectAlphaMaskNoColorWaterProgram.mName = "No color alpha mask Water Shader"; +		gObjectAlphaMaskNoColorWaterProgram.mFeatures.calculatesLighting = true; +		gObjectAlphaMaskNoColorWaterProgram.mFeatures.calculatesAtmospherics = true; +		gObjectAlphaMaskNoColorWaterProgram.mFeatures.hasWaterFog = true; +		gObjectAlphaMaskNoColorWaterProgram.mFeatures.hasAtmospherics = true; +		gObjectAlphaMaskNoColorWaterProgram.mFeatures.hasLighting = true; +		gObjectAlphaMaskNoColorWaterProgram.mFeatures.disableTextureIndex = true; +		gObjectAlphaMaskNoColorWaterProgram.mFeatures.hasAlphaMask = true; +		gObjectAlphaMaskNoColorWaterProgram.mShaderFiles.clear(); +		gObjectAlphaMaskNoColorWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleNoColorV.glsl", GL_VERTEX_SHADER_ARB)); +		gObjectAlphaMaskNoColorWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); +		gObjectAlphaMaskNoColorWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +		gObjectAlphaMaskNoColorWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; +		success = gObjectAlphaMaskNoColorWaterProgram.createShader(NULL, NULL); +	} + +	if (success) +	{ +		gTreeProgram.mName = "Tree Shader"; +		gTreeProgram.mFeatures.calculatesLighting = true; +		gTreeProgram.mFeatures.calculatesAtmospherics = true; +		gTreeProgram.mFeatures.hasGamma = true; +		gTreeProgram.mFeatures.hasAtmospherics = true; +		gTreeProgram.mFeatures.hasLighting = true; +		gTreeProgram.mFeatures.disableTextureIndex = true; +		gTreeProgram.mFeatures.hasAlphaMask = true; +		gTreeProgram.mShaderFiles.clear(); +		gTreeProgram.mShaderFiles.push_back(make_pair("objects/treeV.glsl", GL_VERTEX_SHADER_ARB)); +		gTreeProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB)); +		gTreeProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +		success = gTreeProgram.createShader(NULL, NULL); +	} +	 +	if (success) +	{ +		gTreeWaterProgram.mName = "Tree Water Shader"; +		gTreeWaterProgram.mFeatures.calculatesLighting = true; +		gTreeWaterProgram.mFeatures.calculatesAtmospherics = true; +		gTreeWaterProgram.mFeatures.hasWaterFog = true; +		gTreeWaterProgram.mFeatures.hasAtmospherics = true; +		gTreeWaterProgram.mFeatures.hasLighting = true; +		gTreeWaterProgram.mFeatures.disableTextureIndex = true; +		gTreeWaterProgram.mFeatures.hasAlphaMask = true; +		gTreeWaterProgram.mShaderFiles.clear(); +		gTreeWaterProgram.mShaderFiles.push_back(make_pair("objects/treeV.glsl", GL_VERTEX_SHADER_ARB)); +		gTreeWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); +		gTreeWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +		gTreeWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; +		success = gTreeWaterProgram.createShader(NULL, NULL); +	} + +	if (success) +	{  		gObjectFullbrightNonIndexedProgram.mName = "Non Indexed Fullbright Shader";  		gObjectFullbrightNonIndexedProgram.mFeatures.calculatesAtmospherics = true;  		gObjectFullbrightNonIndexedProgram.mFeatures.hasGamma = true; @@ -1809,6 +1921,37 @@ BOOL LLViewerShaderMgr::loadShadersObject()  	if (success)  	{ +		gObjectFullbrightNoColorProgram.mName = "Non Indexed no color Fullbright Shader"; +		gObjectFullbrightNoColorProgram.mFeatures.calculatesAtmospherics = true; +		gObjectFullbrightNoColorProgram.mFeatures.hasGamma = true; +		gObjectFullbrightNoColorProgram.mFeatures.hasTransport = true; +		gObjectFullbrightNoColorProgram.mFeatures.isFullbright = true; +		gObjectFullbrightNoColorProgram.mFeatures.disableTextureIndex = true; +		gObjectFullbrightNoColorProgram.mShaderFiles.clear(); +		gObjectFullbrightNoColorProgram.mShaderFiles.push_back(make_pair("objects/fullbrightNoColorV.glsl", GL_VERTEX_SHADER_ARB)); +		gObjectFullbrightNoColorProgram.mShaderFiles.push_back(make_pair("objects/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB)); +		gObjectFullbrightNoColorProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +		success = gObjectFullbrightNoColorProgram.createShader(NULL, NULL); +	} + +	if (success) +	{ +		gObjectFullbrightNoColorWaterProgram.mName = "Non Indexed no color Fullbright Water Shader"; +		gObjectFullbrightNoColorWaterProgram.mFeatures.calculatesAtmospherics = true; +		gObjectFullbrightNoColorWaterProgram.mFeatures.isFullbright = true; +		gObjectFullbrightNoColorWaterProgram.mFeatures.hasWaterFog = true;		 +		gObjectFullbrightNoColorWaterProgram.mFeatures.hasTransport = true; +		gObjectFullbrightNoColorWaterProgram.mFeatures.disableTextureIndex = true; +		gObjectFullbrightNoColorWaterProgram.mShaderFiles.clear(); +		gObjectFullbrightNoColorWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightNoColorV.glsl", GL_VERTEX_SHADER_ARB)); +		gObjectFullbrightNoColorWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); +		gObjectFullbrightNoColorWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +		gObjectFullbrightNoColorWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; +		success = gObjectFullbrightNoColorWaterProgram.createShader(NULL, NULL); +	} + +	if (success) +	{  		gObjectShinyNonIndexedProgram.mName = "Non Indexed Shiny Shader";  		gObjectShinyNonIndexedProgram.mFeatures.calculatesAtmospherics = true;  		gObjectShinyNonIndexedProgram.mFeatures.calculatesLighting = true; @@ -1892,19 +2035,19 @@ BOOL LLViewerShaderMgr::loadShadersObject()  	if (success)  	{ -		gObjectSimpleAlphaMaskProgram.mName = "Simple Alpha Mask Shader"; -		gObjectSimpleAlphaMaskProgram.mFeatures.calculatesLighting = true; -		gObjectSimpleAlphaMaskProgram.mFeatures.calculatesAtmospherics = true; -		gObjectSimpleAlphaMaskProgram.mFeatures.hasGamma = true; -		gObjectSimpleAlphaMaskProgram.mFeatures.hasAtmospherics = true; -		gObjectSimpleAlphaMaskProgram.mFeatures.hasLighting = true; -		gObjectSimpleAlphaMaskProgram.mFeatures.hasAlphaMask = true; -		gObjectSimpleAlphaMaskProgram.mFeatures.mIndexedTextureChannels = 0; -		gObjectSimpleAlphaMaskProgram.mShaderFiles.clear(); -		gObjectSimpleAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB)); -		gObjectSimpleAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB)); -		gObjectSimpleAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; -		success = gObjectSimpleAlphaMaskProgram.createShader(NULL, NULL); +		gObjectSimpleWaterProgram.mName = "Simple Water Shader"; +		gObjectSimpleWaterProgram.mFeatures.calculatesLighting = true; +		gObjectSimpleWaterProgram.mFeatures.calculatesAtmospherics = true; +		gObjectSimpleWaterProgram.mFeatures.hasWaterFog = true; +		gObjectSimpleWaterProgram.mFeatures.hasAtmospherics = true; +		gObjectSimpleWaterProgram.mFeatures.hasLighting = true; +		gObjectSimpleWaterProgram.mFeatures.mIndexedTextureChannels = 0; +		gObjectSimpleWaterProgram.mShaderFiles.clear(); +		gObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB)); +		gObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); +		gObjectSimpleWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +		gObjectSimpleWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; +		success = gObjectSimpleWaterProgram.createShader(NULL, NULL);  	}  	if (success) @@ -1923,23 +2066,24 @@ BOOL LLViewerShaderMgr::loadShadersObject()  		success = gObjectBumpProgram.createShader(NULL, NULL);  	} +	  	if (success)  	{ -		gObjectSimpleWaterProgram.mName = "Simple Water Shader"; -		gObjectSimpleWaterProgram.mFeatures.calculatesLighting = true; -		gObjectSimpleWaterProgram.mFeatures.calculatesAtmospherics = true; -		gObjectSimpleWaterProgram.mFeatures.hasWaterFog = true; -		gObjectSimpleWaterProgram.mFeatures.hasAtmospherics = true; -		gObjectSimpleWaterProgram.mFeatures.hasLighting = true; -		gObjectSimpleWaterProgram.mFeatures.mIndexedTextureChannels = 0; -		gObjectSimpleWaterProgram.mShaderFiles.clear(); -		gObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB)); -		gObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); -		gObjectSimpleWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; -		gObjectSimpleWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; -		success = gObjectSimpleWaterProgram.createShader(NULL, NULL); +		gObjectSimpleAlphaMaskProgram.mName = "Simple Alpha Mask Shader"; +		gObjectSimpleAlphaMaskProgram.mFeatures.calculatesLighting = true; +		gObjectSimpleAlphaMaskProgram.mFeatures.calculatesAtmospherics = true; +		gObjectSimpleAlphaMaskProgram.mFeatures.hasGamma = true; +		gObjectSimpleAlphaMaskProgram.mFeatures.hasAtmospherics = true; +		gObjectSimpleAlphaMaskProgram.mFeatures.hasLighting = true; +		gObjectSimpleAlphaMaskProgram.mFeatures.hasAlphaMask = true; +		gObjectSimpleAlphaMaskProgram.mFeatures.mIndexedTextureChannels = 0; +		gObjectSimpleAlphaMaskProgram.mShaderFiles.clear(); +		gObjectSimpleAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB)); +		gObjectSimpleAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB)); +		gObjectSimpleAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +		success = gObjectSimpleAlphaMaskProgram.createShader(NULL, NULL);  	} -	 +  	if (success)  	{  		gObjectSimpleWaterAlphaMaskProgram.mName = "Simple Water Alpha Mask Shader"; @@ -1991,6 +2135,37 @@ BOOL LLViewerShaderMgr::loadShadersObject()  	if (success)  	{ +		gObjectEmissiveProgram.mName = "Emissive Shader"; +		gObjectEmissiveProgram.mFeatures.calculatesAtmospherics = true; +		gObjectEmissiveProgram.mFeatures.hasGamma = true; +		gObjectEmissiveProgram.mFeatures.hasTransport = true; +		gObjectEmissiveProgram.mFeatures.isFullbright = true; +		gObjectEmissiveProgram.mFeatures.mIndexedTextureChannels = 0; +		gObjectEmissiveProgram.mShaderFiles.clear(); +		gObjectEmissiveProgram.mShaderFiles.push_back(make_pair("objects/emissiveV.glsl", GL_VERTEX_SHADER_ARB)); +		gObjectEmissiveProgram.mShaderFiles.push_back(make_pair("objects/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB)); +		gObjectEmissiveProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +		success = gObjectEmissiveProgram.createShader(NULL, NULL); +	} + +	if (success) +	{ +		gObjectEmissiveWaterProgram.mName = "Emissive Water Shader"; +		gObjectEmissiveWaterProgram.mFeatures.calculatesAtmospherics = true; +		gObjectEmissiveWaterProgram.mFeatures.isFullbright = true; +		gObjectEmissiveWaterProgram.mFeatures.hasWaterFog = true;		 +		gObjectEmissiveWaterProgram.mFeatures.hasTransport = true; +		gObjectEmissiveWaterProgram.mFeatures.mIndexedTextureChannels = 0; +		gObjectEmissiveWaterProgram.mShaderFiles.clear(); +		gObjectEmissiveWaterProgram.mShaderFiles.push_back(make_pair("objects/emissiveV.glsl", GL_VERTEX_SHADER_ARB)); +		gObjectEmissiveWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); +		gObjectEmissiveWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; +		gObjectEmissiveWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; +		success = gObjectEmissiveWaterProgram.createShader(NULL, NULL); +	} + +	if (success) +	{  		gObjectFullbrightAlphaMaskProgram.mName = "Fullbright Alpha Mask Shader";  		gObjectFullbrightAlphaMaskProgram.mFeatures.calculatesAtmospherics = true;  		gObjectFullbrightAlphaMaskProgram.mFeatures.hasGamma = true; @@ -2272,7 +2447,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar()  		gAvatarProgram.mShaderFiles.push_back(make_pair("avatar/avatarV.glsl", GL_VERTEX_SHADER_ARB));  		gAvatarProgram.mShaderFiles.push_back(make_pair("avatar/avatarF.glsl", GL_FRAGMENT_SHADER_ARB));  		gAvatarProgram.mShaderLevel = mVertexShaderLevel[SHADER_AVATAR]; -		success = gAvatarProgram.createShader(&mAvatarAttribs, &mAvatarUniforms); +		success = gAvatarProgram.createShader(NULL, &mAvatarUniforms);  		if (success)  		{ @@ -2291,7 +2466,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar()  			// Note: no cloth under water:  			gAvatarWaterProgram.mShaderLevel = llmin(mVertexShaderLevel[SHADER_AVATAR], 1);	  			gAvatarWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;				 -			success = gAvatarWaterProgram.createShader(&mAvatarAttribs, &mAvatarUniforms); +			success = gAvatarWaterProgram.createShader(NULL, &mAvatarUniforms);  		}  		/// Keep track of avatar levels @@ -2310,7 +2485,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar()  		gAvatarPickProgram.mShaderFiles.push_back(make_pair("avatar/pickAvatarV.glsl", GL_VERTEX_SHADER_ARB));  		gAvatarPickProgram.mShaderFiles.push_back(make_pair("avatar/pickAvatarF.glsl", GL_FRAGMENT_SHADER_ARB));  		gAvatarPickProgram.mShaderLevel = mVertexShaderLevel[SHADER_AVATAR]; -		success = gAvatarPickProgram.createShader(&mAvatarAttribs, &mAvatarUniforms); +		success = gAvatarPickProgram.createShader(NULL, &mAvatarUniforms);  	}  	if (success) @@ -2416,6 +2591,21 @@ BOOL LLViewerShaderMgr::loadShadersInterface()  	if (success)  	{ +		gOneTextureNoColorProgram.mName = "One Texture No Color Shader"; +		gOneTextureNoColorProgram.mShaderFiles.clear(); +		gOneTextureNoColorProgram.mShaderFiles.push_back(make_pair("interface/onetexturenocolorV.glsl", GL_VERTEX_SHADER_ARB)); +		gOneTextureNoColorProgram.mShaderFiles.push_back(make_pair("interface/onetexturenocolorF.glsl", GL_FRAGMENT_SHADER_ARB)); +		gOneTextureNoColorProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE]; +		success = gOneTextureNoColorProgram.createShader(NULL, NULL); +		if (success) +		{ +			gOneTextureNoColorProgram.bind(); +			gOneTextureNoColorProgram.uniform1i("tex0", 0); +		} +	} + +	if (success) +	{  		gSolidColorProgram.mName = "Solid Color Shader";  		gSolidColorProgram.mShaderFiles.clear();  		gSolidColorProgram.mShaderFiles.push_back(make_pair("interface/solidcolorV.glsl", GL_VERTEX_SHADER_ARB)); diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h index 629ef32adb..ced7ed06d9 100644 --- a/indra/newview/llviewershadermgr.h +++ b/indra/newview/llviewershadermgr.h @@ -186,16 +186,10 @@ public:  	typedef enum  	{ -		AVATAR_WEIGHT = END_RESERVED_ATTRIBS, -		AVATAR_CLOTHING, +		AVATAR_MATRIX = END_RESERVED_UNIFORMS,  		AVATAR_WIND,  		AVATAR_SINWAVE, -		AVATAR_GRAVITY -	} eAvatarAttribs; - -	typedef enum -	{ -		AVATAR_MATRIX = END_RESERVED_UNIFORMS +		AVATAR_GRAVITY,  	} eAvatarUniforms;  	// simple model of forward iterator @@ -265,9 +259,6 @@ private:  	std::vector<std::string> mGlowExtractUniforms; -	//avatar shader parameter tables -	std::vector<std::string> mAvatarAttribs; -  	std::vector<std::string> mAvatarUniforms;  	// the list of shaders we need to propagate parameters to. @@ -294,7 +285,9 @@ extern LLGLSLShader			gGlowCombineProgram;  //output tex0[tc0] + tex1[tc1]  extern LLGLSLShader			gTwoTextureAddProgram; -								 +						 +extern LLGLSLShader			gOneTextureNoColorProgram; +  //object shaders  extern LLGLSLShader			gObjectSimpleProgram;  extern LLGLSLShader			gObjectSimpleAlphaMaskProgram; @@ -304,13 +297,21 @@ extern LLGLSLShader			gObjectSimpleNonIndexedProgram;  extern LLGLSLShader			gObjectSimpleNonIndexedWaterProgram;  extern LLGLSLShader			gObjectAlphaMaskNonIndexedProgram;  extern LLGLSLShader			gObjectAlphaMaskNonIndexedWaterProgram; +extern LLGLSLShader			gObjectAlphaMaskNoColorProgram; +extern LLGLSLShader			gObjectAlphaMaskNoColorWaterProgram;  extern LLGLSLShader			gObjectFullbrightProgram;  extern LLGLSLShader			gObjectFullbrightWaterProgram; +extern LLGLSLShader			gObjectFullbrightNoColorProgram; +extern LLGLSLShader			gObjectFullbrightNoColorWaterProgram; +extern LLGLSLShader			gObjectEmissiveProgram; +extern LLGLSLShader			gObjectEmissiveWaterProgram;  extern LLGLSLShader			gObjectFullbrightAlphaMaskProgram;  extern LLGLSLShader			gObjectFullbrightWaterAlphaMaskProgram;  extern LLGLSLShader			gObjectFullbrightNonIndexedProgram;  extern LLGLSLShader			gObjectFullbrightNonIndexedWaterProgram;  extern LLGLSLShader			gObjectBumpProgram; +extern LLGLSLShader			gTreeProgram; +extern LLGLSLShader			gTreeWaterProgram;  extern LLGLSLShader			gObjectSimpleLODProgram;  extern LLGLSLShader			gObjectFullbrightLODProgram; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 988c4ed1a2..6af268f234 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -3458,7 +3458,7 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,  						glScalef(scale, scale, scale);  						LLColor4 color(vovolume->getLightColor(), .5f); -						glColor4fv(color.mV); +						gGL.diffuseColor4fv(color.mV);  						F32 pixel_area = 100000.f;  						// Render Outside diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp index 510525259f..0b746c841c 100644 --- a/indra/newview/llvosurfacepatch.cpp +++ b/indra/newview/llvosurfacepatch.cpp @@ -59,6 +59,12 @@ public:  	// virtual  	void setupVertexBuffer(U32 data_mask) const  	{	 +		if (LLGLSLShader::sNoFixedFunction) +		{ //just use default if shaders are in play +			LLVertexBuffer::setupVertexBuffer(data_mask & ~(MAP_TEXCOORD2 | MAP_TEXCOORD3)); +			return; +		} +  		U8* base = useVBOs() ? (U8*) mAlignedOffset : mMappedData;  		//assume tex coords 2 and 3 are present diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index d8b02fab27..61a8f604ba 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3833,8 +3833,6 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,  		}  	} -	U8 glow = (U8) (facep->getTextureEntry()->getGlow() * 255); -  	if (idx >= 0 &&   		draw_vec[idx]->mVertexBuffer == facep->getVertexBuffer() &&  		draw_vec[idx]->mEnd == facep->getGeomIndex()-1 && @@ -3843,7 +3841,6 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,  		draw_vec[idx]->mEnd - draw_vec[idx]->mStart + facep->getGeomCount() <= (U32) gGLManager.mGLMaxVertexRange &&  		draw_vec[idx]->mCount + facep->getIndicesCount() <= (U32) gGLManager.mGLMaxIndexRange &&  #endif -		draw_vec[idx]->mGlowColor.mV[3] == glow &&  		draw_vec[idx]->mFullbright == fullbright &&  		draw_vec[idx]->mBump == bump &&  		draw_vec[idx]->mTextureMatrix == tex_mat && @@ -3875,7 +3872,6 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,  		draw_vec.push_back(draw_info);  		draw_info->mTextureMatrix = tex_mat;  		draw_info->mModelMatrix = model_mat; -		draw_info->mGlowColor.setVec(0,0,0,glow);  		if (type == LLRenderPass::PASS_ALPHA)  		{ //for alpha sorting  			facep->setDrawInfo(draw_info); @@ -3975,6 +3971,8 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  	U32 cur_total = 0; +	bool emissive = false; +  	//get all the faces into a list  	for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter)  	{ @@ -4186,6 +4184,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  				}  			} +  			if (cur_total > max_total || facep->getIndicesCount() <= 0 || facep->getGeomCount() <= 0)  			{  				facep->clearVertexBuffer(); @@ -4199,6 +4198,11 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  				const LLTextureEntry* te = facep->getTextureEntry();  				LLViewerTexture* tex = facep->getTexture(); +				if (te->getGlow() >= 1.f/255.f) +				{ +					emissive = true; +				} +  				if (facep->isState(LLFace::TEXTURE_ANIM))  				{  					if (!vobj->mTexAnimMode) @@ -4315,6 +4319,14 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  	U32 bump_mask = LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_TEXCOORD1 | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_COLOR;  	U32 fullbright_mask = LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_COLOR; +	if (emissive) +	{ //emissive faces are present, include emissive byte to preserve batching +		simple_mask = simple_mask | LLVertexBuffer::MAP_EMISSIVE; +		alpha_mask = alpha_mask | LLVertexBuffer::MAP_EMISSIVE; +		bump_mask = bump_mask | LLVertexBuffer::MAP_EMISSIVE; +		fullbright_mask = fullbright_mask | LLVertexBuffer::MAP_EMISSIVE; +	} +  	bool batch_textures = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT) > 1;  	if (batch_textures) @@ -4458,10 +4470,6 @@ struct CompareBatchBreakerModified  		{  			return lte->getFullbright() < rte->getFullbright();  		} -		else  if (lte->getGlow() != rte->getGlow()) -		{ -			return lte->getGlow() < rte->getGlow(); -		}  		else  		{  			return lhs->getTexture() < rhs->getTexture(); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 7c2eaecf8b..8620894229 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -138,7 +138,7 @@ const F32 BACKLIGHT_DAY_MAGNITUDE_OBJECT = 0.1f;  const F32 BACKLIGHT_NIGHT_MAGNITUDE_OBJECT = 0.08f;  const S32 MAX_OFFSCREEN_GEOMETRY_CHANGES_PER_FRAME = 10;  const U32 REFLECTION_MAP_RES = 128; - +const U32 DEFERRED_VB_MASK = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_TEXCOORD1;  // Max number of occluders to search for. JC  const S32 MAX_OCCLUDER_COUNT = 2; @@ -457,6 +457,8 @@ void LLPipeline::init()  		mSpotLightFade[i] = 1.f;  	} +	mDeferredVB = new LLVertexBuffer(DEFERRED_VB_MASK, 0); +	mDeferredVB->allocateBuffer(3, 0, true);  	setLightingDetail(-1);  } @@ -535,6 +537,8 @@ void LLPipeline::cleanup()  	mMovedBridge.clear();  	mInitialized = FALSE; + +	mDeferredVB = NULL;  }  //============================================================================ @@ -6983,6 +6987,7 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index, LLRen  	shader.uniform1f("lum_scale", gSavedSettings.getF32("RenderLuminanceScale"));  	shader.uniform1f("sun_lum_scale", gSavedSettings.getF32("RenderSunLuminanceScale"));  	shader.uniform1f("sun_lum_offset", gSavedSettings.getF32("RenderSunLuminanceOffset")); +	shader.uniform3fv("sun_dir", 1, mTransformedSunDir.mV);  	shader.uniform1f("lum_lod", gSavedSettings.getF32("RenderLuminanceDetail"));  	shader.uniform1f("gi_range", gSavedSettings.getF32("RenderGIRange"));  	shader.uniform1f("gi_brightness", gSavedSettings.getF32("RenderGIBrightness")); @@ -7057,21 +7062,23 @@ void LLPipeline::renderDeferredLighting()  		glh::matrix4f mat = glh_copy_matrix(gGLModelView); -		F32 vert[] =  -		{ -			-1,1, -			-1,-3, -			3,1, -		}; -		glVertexPointer(2, GL_FLOAT, 0, vert); -		glColor3f(1,1,1); +		LLStrider<LLVector3> vert;  +		mDeferredVB->getVertexStrider(vert); +		LLStrider<LLVector2> tc0; +		LLStrider<LLVector2> tc1; +		mDeferredVB->getTexCoord0Strider(tc0); +		mDeferredVB->getTexCoord1Strider(tc1); +		vert[0].set(-1,1,0); +		vert[1].set(-1,-3,0); +		vert[2].set(3,1,0); +		  		{  			setupHWLights(NULL); //to set mSunDir;  			LLVector4 dir(mSunDir, 0.f);  			glh::vec4f tc(dir.mV);  			mat.mult_matrix_vec(tc); -			glTexCoord4f(tc.v[0], tc.v[1], tc.v[2], 0); +			mTransformedSunDir.set(dir.mV);  		}  		glPushMatrix(); @@ -7335,10 +7342,10 @@ void LLPipeline::renderDeferredLighting()  				glPushMatrix();  				glLoadIdentity(); -				glVertexPointer(2, GL_FLOAT, 0, vert); -				 -				glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); +				mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX); +				mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3); +  				glPopMatrix();  				glMatrixMode(GL_MODELVIEW);  				glPopMatrix(); @@ -7347,7 +7354,7 @@ void LLPipeline::renderDeferredLighting()  			unbindDeferredShader(gDeferredSoftenProgram);  		} -		{ //render sky +		{ //render non-deferred geometry (fullbright, alpha, etc)  			LLGLDisable blend(GL_BLEND);  			LLGLDisable stencil(GL_STENCIL_TEST);  			gGL.setSceneBlendType(LLRender::BT_ALPHA); @@ -7476,7 +7483,7 @@ void LLPipeline::renderDeferredLighting()  							LLFastTimer ftm(FTM_LOCAL_LIGHTS);  							glTexCoord4f(tc.v[0], tc.v[1], tc.v[2], s*s); -							glColor4f(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f); +							gGL.diffuseColor4f(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f);  							glDrawRangeElements(GL_TRIANGLE_FAN, 0, 7, 8,  								GL_UNSIGNED_BYTE, get_box_fan_indices_ptr(camera, center));  							stop_glerror(); @@ -7542,7 +7549,7 @@ void LLPipeline::renderDeferredLighting()  					v[21] = c[0]+s; v[22] = c[1]+s; v[23] = c[2]+s; // 7 - 0111  					glTexCoord4f(tc.v[0], tc.v[1], tc.v[2], s*s); -					glColor4f(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f); +					gGL.diffuseColor4f(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f);  					glDrawRangeElements(GL_TRIANGLE_FAN, 0, 7, 8,  							GL_UNSIGNED_BYTE, get_box_fan_indices_ptr(camera, center));  				} @@ -7553,6 +7560,8 @@ void LLPipeline::renderDeferredLighting()  			{  				bindDeferredShader(gDeferredMultiLightProgram); +				mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX); +  				LLGLDepthTest depth(GL_FALSE);  				//full screen blit @@ -7568,7 +7577,7 @@ void LLPipeline::renderDeferredLighting()  				LLVector4 light[max_count];  				LLVector4 col[max_count]; -				glVertexPointer(2, GL_FLOAT, 0, vert); +//				glVertexPointer(2, GL_FLOAT, 0, vert);  				F32 far_z = 0.f; @@ -7591,7 +7600,8 @@ void LLPipeline::renderDeferredLighting()  						gDeferredMultiLightProgram.uniform1f("far_z", far_z);  						far_z = 0.f;  						count = 0; -						glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); +						 +						mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3);  					}  				} @@ -7623,7 +7633,7 @@ void LLPipeline::renderDeferredLighting()  					col *= volume->getLightIntensity();  					glTexCoord4f(tc.v[0], tc.v[1], tc.v[2], s*s); -					glColor4f(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f); +					gGL.diffuseColor4f(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f);  					glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);  				} @@ -7660,8 +7670,8 @@ void LLPipeline::renderDeferredLighting()  				LLVertexBuffer::unbind(); -				glVertexPointer(2, GL_FLOAT, 0, vert); -				glColor3f(1,1,1); +//				glVertexPointer(2, GL_FLOAT, 0, vert); +				gGL.diffuseColor3f(1,1,1);  				glPushMatrix();  				glLoadIdentity(); @@ -8297,7 +8307,7 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera  	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); -	glColor4f(1,1,1,1); +	gGL.diffuseColor4f(1,1,1,1);  	stop_glerror(); @@ -8341,7 +8351,7 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera  		gDeferredShadowAlphaMaskProgram.bind();  		gDeferredShadowAlphaMaskProgram.setAlphaRange(0.6f, 1.f);  		renderObjects(LLRenderPass::PASS_ALPHA_SHADOW, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR, TRUE); -		glColor4f(1,1,1,1); +		gGL.diffuseColor4f(1,1,1,1);  		renderObjects(LLRenderPass::PASS_GRASS, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, TRUE);  	} diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 28e6526acd..61ab84588d 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -536,6 +536,9 @@ public:  	LLRenderTarget			mHighlight;  	LLRenderTarget			mPhysicsDisplay; +	//utility buffer for rendering post effects, gets abused by renderDeferredLighting +	LLPointer<LLVertexBuffer> mDeferredVB; +  	//sun shadow map  	LLRenderTarget			mShadow[6];  	std::vector<LLVector3>	mShadowFrustPoints[4]; @@ -581,6 +584,7 @@ public:  	LLColor4				mSunDiffuse;  	LLVector3				mSunDir; +	LLVector3				mTransformedSunDir;  	BOOL					mInitialized;  	BOOL					mVertexShadersEnabled; | 
