diff options
| author | Dave Parks <davep@lindenlab.com> | 2011-12-14 17:55:36 -0600 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2011-12-14 17:55:36 -0600 | 
| commit | 9fa68f0da363cd3c20dbb079f5d2901a45dfea5f (patch) | |
| tree | 9d9bd9f059bac18338376144f3d14fd42d4daeed | |
| parent | 2dc7df91ade45d8952473f7de5068e8705440e29 (diff) | |
SH-2743 Fix for shader compiler error on some GL 3.x implementations.
| -rw-r--r-- | indra/llrender/llglslshader.cpp | 2 | ||||
| -rw-r--r-- | indra/llrender/llglslshader.h | 1 | ||||
| -rw-r--r-- | indra/llrender/llshadermgr.cpp | 18 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl | 3 | ||||
| -rw-r--r-- | indra/newview/llviewershadermgr.cpp | 5 | 
5 files changed, 18 insertions, 11 deletions
diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 5a6f3d8292..6b2852670a 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -66,7 +66,7 @@ BOOL shouldChange(const LLVector4& v1, const LLVector4& v2)  LLShaderFeatures::LLShaderFeatures()  : calculatesLighting(false), isShiny(false), isFullbright(false), hasWaterFog(false),  hasTransport(false), hasSkinning(false), hasObjectSkinning(false), hasAtmospherics(false), isSpecular(false), -hasGamma(false), hasLighting(false), calculatesAtmospherics(false), mIndexedTextureChannels(0), disableTextureIndex(false), +hasGamma(false), hasLighting(false), isAlphaLighting(false), calculatesAtmospherics(false), mIndexedTextureChannels(0), disableTextureIndex(false),  hasAlphaMask(false)  {  } diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index 2a6c050eac..00b4b0dbd4 100644 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -36,6 +36,7 @@ public:  	bool calculatesLighting;  	bool calculatesAtmospherics;  	bool hasLighting; // implies no transport (it's possible to have neither though) +	bool isAlphaLighting; // indicates lighting shaders need not be linked in (lighting performed directly in alpha shader to match deferred lighting functions)  	bool isShiny;  	bool isFullbright; // implies no lighting  	bool isSpecular; diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index 85c4bab7a9..1a03aeebb7 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -107,10 +107,13 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)  			{  				return FALSE;  			} -			 -			if (!shader->attachObject("lighting/sumLightsSpecularV.glsl")) +		 +			if (!features->isAlphaLighting)  			{ -				return FALSE; +				if (!shader->attachObject("lighting/sumLightsSpecularV.glsl")) +				{ +					return FALSE; +				}  			}  			if (!shader->attachObject("lighting/lightSpecularV.glsl")) @@ -125,9 +128,12 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)  				return FALSE;  			} -			if (!shader->attachObject("lighting/sumLightsV.glsl")) +			if (!features->isAlphaLighting)  			{ -				return FALSE; +				if (!shader->attachObject("lighting/sumLightsV.glsl")) +				{ +					return FALSE; +				}  			}  			if (!shader->attachObject("lighting/lightV.glsl")) @@ -296,7 +302,7 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)  				}  				shader->mFeatures.mIndexedTextureChannels = llmax(LLGLSLShader::sIndexedTextureChannels-1, 1);  			} -		}		 +		}  	}  	// NOTE order of shader object attaching is VERY IMPORTANT!!! diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl index b09441f7eb..0170ad4b55 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl @@ -30,7 +30,6 @@ ATTRIBUTE vec3 normal;  ATTRIBUTE vec4 diffuse_color;  ATTRIBUTE vec2 texcoord0; -vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  mat4 getObjectSkinnedTransform();  void calcAtmospherics(vec3 inPositionEye); @@ -38,8 +37,6 @@ float calcDirectionalLight(vec3 n, vec3 l);  vec3 atmosAmbient(vec3 light);  vec3 atmosAffectDirectionalLight(float lightIntensity); -vec3 scaleDownLight(vec3 light); -vec3 scaleUpLight(vec3 light);  VARYING vec3 vary_position;  VARYING vec3 vary_ambient; diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index bddc07b395..5de363e03c 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -1103,11 +1103,12 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	{  		gDeferredSkinnedAlphaProgram.mName = "Deferred Skinned Alpha Shader";  		gDeferredSkinnedAlphaProgram.mFeatures.hasObjectSkinning = true; -		gDeferredSkinnedAlphaProgram.mFeatures.calculatesLighting = true;  		gDeferredSkinnedAlphaProgram.mFeatures.calculatesAtmospherics = true;  		gDeferredSkinnedAlphaProgram.mFeatures.hasGamma = true;  		gDeferredSkinnedAlphaProgram.mFeatures.hasAtmospherics = true; +		gDeferredSkinnedAlphaProgram.mFeatures.calculatesLighting = true;  		gDeferredSkinnedAlphaProgram.mFeatures.hasLighting = true; +		gDeferredSkinnedAlphaProgram.mFeatures.isAlphaLighting = true;  		gDeferredSkinnedAlphaProgram.mFeatures.disableTextureIndex = true;  		gDeferredSkinnedAlphaProgram.mShaderFiles.clear();  		gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); @@ -1235,6 +1236,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredAlphaProgram.mFeatures.hasGamma = true;  		gDeferredAlphaProgram.mFeatures.hasAtmospherics = true;  		gDeferredAlphaProgram.mFeatures.hasLighting = true; +		gDeferredAlphaProgram.mFeatures.isAlphaLighting = true;  		gDeferredAlphaProgram.mFeatures.disableTextureIndex = true; //hack to disable auto-setup of texture channels  		if (mVertexShaderLevel[SHADER_DEFERRED] < 1)  		{ @@ -1398,6 +1400,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredAvatarAlphaProgram.mFeatures.hasGamma = true;  		gDeferredAvatarAlphaProgram.mFeatures.hasAtmospherics = true;  		gDeferredAvatarAlphaProgram.mFeatures.hasLighting = true; +		gDeferredAvatarAlphaProgram.mFeatures.isAlphaLighting = true;  		gDeferredAvatarAlphaProgram.mFeatures.disableTextureIndex = true;  		gDeferredAvatarAlphaProgram.mShaderFiles.clear();  		gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/avatarAlphaV.glsl", GL_VERTEX_SHADER_ARB));  | 
