diff options
| -rw-r--r-- | .hgtags | 1 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/objects/previewV.glsl | 39 | ||||
| -rw-r--r-- | indra/newview/llviewershadermgr.cpp | 7 | 
3 files changed, 41 insertions, 6 deletions
| @@ -408,3 +408,4 @@ c296133849d1f103c0e2abc41e6599daed00b67b DRTVWR-280  37947e4f771f001b551581bf7cd0051c3153beed DRTVWR-282  6482cceb91cda68b799f3e6cdc66d33bf123547a DRTVWR-284  ccf991e02dc2f63fb646324230d54832683f4a9b DRTVWR-286 +2d849850558a5a0324b398d1c102d30bcbdfb88f DRTVWR-287 diff --git a/indra/newview/app_settings/shaders/class1/objects/previewV.glsl b/indra/newview/app_settings/shaders/class1/objects/previewV.glsl index da3387e7a5..7f3f84398b 100644 --- a/indra/newview/app_settings/shaders/class1/objects/previewV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/previewV.glsl @@ -23,9 +23,6 @@   * $/LicenseInfo$   */ -float calcDirectionalLight(vec3 n, vec3 l); -float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight); -  uniform mat3 normal_matrix;  uniform mat4 texture_matrix0;  uniform mat4 modelview_matrix; @@ -45,6 +42,42 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; +//=================================================================================================== +//declare these here explicitly to separate them from atmospheric lighting elsewhere to work around +//drivers that are picky about functions being declared but not defined even if they aren't called +float calcDirectionalLight(vec3 n, vec3 l) +{ +	float a = max(dot(n,l),0.0); +	return a; +} + + +float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight) +{ +	//get light vector +	vec3 lv = lp.xyz-v; +	 +	//get distance +	float d = length(lv); +	 +	//normalize light vector +	lv *= 1.0/d; +	 +	//distance attenuation +	float da = clamp(1.0/(la * d), 0.0, 1.0); +	 +	// spotlight coefficient. +	float spot = max(dot(-ln, lv), is_pointlight); +	da *= spot*spot; // GL_SPOT_EXPONENT=2 + +	//angular attenuation +	da *= calcDirectionalLight(n, lv); + +	return da;	 +} +//==================================================================================================== + +  void main()  {  	//transform vertex diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 142cb2090d..ba9818946c 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -2025,11 +2025,11 @@ BOOL LLViewerShaderMgr::loadShadersObject()  	if (success)  	{  		gObjectPreviewProgram.mName = "Simple Shader"; -		gObjectPreviewProgram.mFeatures.calculatesLighting = true; +		gObjectPreviewProgram.mFeatures.calculatesLighting = false;  		gObjectPreviewProgram.mFeatures.calculatesAtmospherics = false; -		gObjectPreviewProgram.mFeatures.hasGamma = true; +		gObjectPreviewProgram.mFeatures.hasGamma = false;  		gObjectPreviewProgram.mFeatures.hasAtmospherics = false; -		gObjectPreviewProgram.mFeatures.hasLighting = true; +		gObjectPreviewProgram.mFeatures.hasLighting = false;  		gObjectPreviewProgram.mFeatures.mIndexedTextureChannels = 0;  		gObjectPreviewProgram.mFeatures.disableTextureIndex = true;  		gObjectPreviewProgram.mShaderFiles.clear(); @@ -2037,6 +2037,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()  		gObjectPreviewProgram.mShaderFiles.push_back(make_pair("objects/previewF.glsl", GL_FRAGMENT_SHADER_ARB));  		gObjectPreviewProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];  		success = gObjectPreviewProgram.createShader(NULL, NULL); +		gObjectPreviewProgram.mFeatures.hasLighting = true;  	}  	if (success) | 
