diff options
Diffstat (limited to 'indra/newview')
18 files changed, 55 insertions, 47 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaNoColorV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaNoColorV.glsl index 145cf524d4..c8ddefac26 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaNoColorV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaNoColorV.glsl @@ -71,18 +71,18 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  	vec3 lv = lp.xyz-v;  	//get distance -	float d = length(lv); +	float d = dot(lv,lv);  	float da = 0.0; -	//if (d > 0.0 && la > 0.0 && fa > 0.0) +	if (d > 0.0 && la > 0.0 && fa > 0.0)  	{  		//normalize light vector -		lv /= d; +		lv = normalize(lv);  		//distance attenuation -		float dist = d*la; -		da = clamp(1.0-(dist-1.0+fa)/fa, 0.0, 1.0); +		float dist2 = d/la; +		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);  		// spotlight coefficient.  		float spot = max(dot(-ln, lv), is_pointlight); diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl index 2e5a2c273e..0e6ab80d4d 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl @@ -311,14 +311,11 @@ void main()  			vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds;  			vec4 stc = (proj_mat * vec4(pfinal.xyz, 1.0)); - +			stc /= stc.w;  			if (stc.z > 0.0)  			{ -				stc.xy /= stc.w; - -				float fatten = clamp(envIntensity*envIntensity+envIntensity*0.5, 0.25, 1.0); +				float fatten = clamp(envIntensity*envIntensity+envIntensity*0.25, 0.25, 1.0); -				//stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);  				stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);  				if (stc.x < 1.0 && @@ -326,7 +323,7 @@ void main()  					stc.x > 0.0 &&  					stc.y > 0.0)  				{ -					col += color.rgb*texture2DLodSpecular(projectionMap, stc.xy, proj_lod-envIntensity*proj_lod).rgb*spec.rgb;										 +					col += color.rgb*texture2DLodSpecular(projectionMap, stc.xy, proj_lod).rgb*spec.rgb;										  				}  			}  		} diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl index 73b9767a71..106d48bd71 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl @@ -35,7 +35,7 @@ uniform sampler2DRect diffuseRect;  uniform sampler2DRect specularRect;  uniform sampler2DRect normalMap;  uniform samplerCube environmentMap; -//uniform sampler2D noiseMap; +uniform sampler2D noiseMap;  uniform sampler2D lightFunc;  uniform sampler2DRect depthMap; @@ -112,7 +112,7 @@ void main()  	lv = normalize(lv);  	da = dot(norm, lv); -		//float noise = texture2D(noiseMap, frag.xy/128.0).b; +	float noise = texture2D(noiseMap, frag.xy/128.0).b;  	vec3 col = texture2DRect(diffuseRect, frag.xy).rgb;  	float fa = falloff+1.0; @@ -120,7 +120,7 @@ void main()  	dist_atten *= dist_atten;  	dist_atten *= 2.0; -		float lit = da * dist_atten; +	float lit = da * dist_atten * noise;  	col = color.rgb*lit*col; diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl index aeef09cf5f..a5625fbc16 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl @@ -37,7 +37,7 @@ VARYING vec3 trans_center;  void main()  {  	//transform vertex -	vec3 p = position*1.f/size+center; +	vec3 p = position*size+center;  	vec4 pos = modelview_projection_matrix * vec4(p.xyz, 1.0);  	vary_fragcoord = pos;  	trans_center = (modelview_matrix*vec4(center.xyz, 1.0)).xyz; diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl index e7a3bb2001..1c3ad49a21 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl @@ -58,6 +58,7 @@ uniform vec3 normScale;  uniform float fresnelScale;  uniform float fresnelOffset;  uniform float blurMultiplier; +uniform vec2 screen_res;  uniform mat4 norm_mat; //region space to screen space  //bigWave is (refCoord.w, view.w); diff --git a/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl index 485e48537c..0d8dab0a41 100755 --- a/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl @@ -43,11 +43,13 @@ uniform vec2 fbScale;  uniform float refScale;  uniform float znear;  uniform float zfar; +uniform float kd;  uniform vec4 waterPlane;  uniform vec3 eyeVec;  uniform vec4 waterFogColor;  uniform float waterFogDensity;  uniform float waterFogKS; +uniform vec2 screenRes;  //bigWave is (refCoord.w, view.w);  VARYING vec4 refCoord; diff --git a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl index 1fd7bdaa5c..79bffab745 100755 --- a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl @@ -42,6 +42,8 @@ uniform vec3 lightDir;  uniform vec3 specular;  uniform float lightExp;  uniform float refScale; +uniform float kd; +uniform vec2 screenRes;  uniform vec3 normScale;  uniform float fresnelScale;  uniform float fresnelOffset; diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl index dc0b989e34..a9288b3df6 100755 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl @@ -45,7 +45,7 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  	lv *= 1.0/d;  	//distance attenuation -	float da = clamp(1.0/(1.f/la * d), 0.0, 1.0); +	float da = clamp(1.0/(la * d), 0.0, 1.0);  	// spotlight coefficient.  	float spot = max(dot(-ln, lv), is_pointlight); diff --git a/indra/newview/app_settings/shaders/class1/objects/previewV.glsl b/indra/newview/app_settings/shaders/class1/objects/previewV.glsl index c325a236d7..7f3f84398b 100755 --- a/indra/newview/app_settings/shaders/class1/objects/previewV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/previewV.glsl @@ -91,8 +91,8 @@ void main()  	// Collect normal lights (need to be divided by two, as we later multiply by 2)  	col.rgb += light_diffuse[1].rgb * calcDirectionalLight(norm, light_position[1].xyz); -	col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], 1.f/light_attenuation[2].x, light_attenuation[2].z); -	col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], 1.f/light_attenuation[3].x, light_attenuation[3].z); +	col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], light_attenuation[2].x, light_attenuation[2].z); +	col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], light_attenuation[3].x, light_attenuation[3].z);  	vertex_color = col*color;  } diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index 1cd4d87437..e4ebfea665 100755 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -570,28 +570,23 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)  					}  				} -				static LLFastTimer::DeclareTimer FTM_RENDER_ALPHA_PUSH("Alpha Push Verts"); -				{ -					LLFastTimer t(FTM_RENDER_ALPHA_PUSH); -					gGL.blendFunc((LLRender::eBlendFactor) params.mBlendFuncSrc, (LLRender::eBlendFactor) params.mBlendFuncDst, mAlphaSFactor, mAlphaDFactor); -					params.mVertexBuffer->setBuffer(mask); +				params.mVertexBuffer->setBuffer(mask & ~(params.mFullbright ? (LLVertexBuffer::MAP_TANGENT | LLVertexBuffer::MAP_TEXCOORD1 | LLVertexBuffer::MAP_TEXCOORD2) : 0)); +                  				params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);  				gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode); -				}  				// 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 (current_shader &&   					draw_glow_for_this_partition && -					params.mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_EMISSIVE) && -					(!params.mParticle || params.mHasGlow)) +					params.mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_EMISSIVE))  				{ -					static LLFastTimer::DeclareTimer FTM_RENDER_ALPHA_GLOW("Alpha Glow"); -					LLFastTimer t(FTM_RENDER_ALPHA_GLOW);  					// 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) -					params.mVertexBuffer->setBuffer(mask | LLVertexBuffer::MAP_EMISSIVE); +					emissive_shader->bind(); +					 +					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); @@ -613,8 +608,6 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)  		}  	} -	gGL.setSceneBlendType(LLRender::BT_ALPHA); -  	LLVertexBuffer::unbind();	  	if (!light_enabled) @@ -622,3 +615,4 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)  		gPipeline.enableLightsDynamic();  	}  } + diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 5c4cb71e57..ba8c449c3d 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -311,6 +311,11 @@ void LLDrawPoolAvatar::beginDeferredRiggedMaterialAlpha(S32 pass)  	sVertexProgram = &gDeferredMaterialProgram[pass]; +	if (LLPipeline::sUnderWaterRender) +	{ +		sVertexProgram = &(gDeferredMaterialWaterProgram[pass]); +	} +  	gPipeline.bindDeferredShader(*sVertexProgram);  	sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);  	normal_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::BUMP_MAP); @@ -503,7 +508,7 @@ S32 LLDrawPoolAvatar::getNumDeferredPasses()  {  	if (LLPipeline::sImpostorRender)  	{ -		return 3; +		return 19;  	}  	else  	{ @@ -892,6 +897,8 @@ void LLDrawPoolAvatar::beginRiggedGlow()  		sVertexProgram->bind();  		sVertexProgram->uniform1f(LLShaderMgr::TEXTURE_GAMMA, LLPipeline::sRenderDeferred ? 2.2f : 1.1f); +		F32 gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma"); +		sVertexProgram->uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));  	}  } @@ -944,6 +951,9 @@ void LLDrawPoolAvatar::beginRiggedFullbright()  		else   		{  			sVertexProgram->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f); + +			F32 gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma"); +			sVertexProgram->uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));  		}  	}  } @@ -1045,6 +1055,8 @@ void LLDrawPoolAvatar::beginRiggedFullbrightShiny()  		else   		{  			sVertexProgram->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f); +			F32 gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma"); +			sVertexProgram->uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));  		}  	}  } @@ -1104,6 +1116,12 @@ void LLDrawPoolAvatar::beginDeferredRiggedMaterial(S32 pass)  		return;  	}  	sVertexProgram = &gDeferredMaterialProgram[pass+LLMaterial::SHADER_COUNT]; + +	if (LLPipeline::sUnderWaterRender) +	{ +		sVertexProgram = &(gDeferredMaterialWaterProgram[pass+LLMaterial::SHADER_COUNT]); +	} +  	sVertexProgram->bind();  	normal_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::BUMP_MAP);  	specular_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::SPECULAR_MAP); @@ -1248,10 +1266,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  		if (impostor)  		{ -			if (LLPipeline::sRenderDeferred && //rendering a deferred impostor -				!LLPipeline::sReflectionRender &&  -				avatarp->mImpostor.isComplete() && //impostor has required data channels -				avatarp->mImpostor.getNumTextures() >= 3)  +			if (LLPipeline::sRenderDeferred && !LLPipeline::sReflectionRender && avatarp->mImpostor.isComplete())   			{  				if (normal_channel > -1)  				{ diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp index 32a9365aba..76e89b26e4 100755 --- a/indra/newview/lldrawpoolwater.cpp +++ b/indra/newview/lldrawpoolwater.cpp @@ -696,10 +696,10 @@ void LLDrawPoolWater::shade()  		}  	} -	shader->disableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP); +	shader->disableTexture(LLShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);  	shader->disableTexture(LLShaderMgr::WATER_SCREENTEX);	 -	shader->disableTexture(LLViewerShaderMgr::BUMP_MAP); -	shader->disableTexture(LLViewerShaderMgr::DIFFUSE_MAP); +	shader->disableTexture(LLShaderMgr::BUMP_MAP); +	shader->disableTexture(LLShaderMgr::DIFFUSE_MAP);  	shader->disableTexture(LLShaderMgr::WATER_REFTEX);  	shader->disableTexture(LLShaderMgr::WATER_SCREENDEPTH); diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp index b0e69aa9b5..a98d3e6b05 100755 --- a/indra/newview/lldrawpoolwlsky.cpp +++ b/indra/newview/lldrawpoolwlsky.cpp @@ -422,3 +422,4 @@ void LLDrawPoolWLSky::restoreGL()  		sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE);  	}  } + diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index bf24a37e34..369273bca6 100755 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -1526,13 +1526,13 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		}  		glBindBufferARB(GL_TRANSFORM_FEEDBACK_BUFFER, 0); +  		gGL.popMatrix();  		if (cur_shader)  		{  			cur_shader->bind();  		} -		//gGLDebugLoggingEnabled = FALSE;  	}  	else  #endif diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index c52fe78cf2..d9efd23b43 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1036,6 +1036,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms_in, const S32 detail, bo  			}  		} +  		static LLCachedControl<bool> use_transform_feedback(gSavedSettings, "RenderUseTransformFeedback");  		bool cache_in_vram = use_transform_feedback && gTransformPositionProgram.mProgramObject && @@ -1052,9 +1053,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms_in, const S32 detail, bo  					break;  				}  				volume->genTangents(i); -				//gGLDebugLoggingEnabled = TRUE;  				LLFace::cacheFaceInVRAM(face); -				//gGLDebugLoggingEnabled = FALSE;  			}  		} @@ -4461,8 +4460,6 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  	bool emissive = false; -	 -  	{  		LLFastTimer t(FTM_REBUILD_VOLUME_FACE_LIST); diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp index 548890b5b5..72d628fb88 100755 --- a/indra/newview/llwaterparammanager.cpp +++ b/indra/newview/llwaterparammanager.cpp @@ -188,6 +188,7 @@ void LLWaterParamManager::updateShaderUniforms(LLGLSLShader * shader)  	if (shader->mShaderGroup == LLGLSLShader::SG_WATER)  	{  		shader->uniform4fv(LLViewerShaderMgr::LIGHTNORM, 1, LLWLParamManager::getInstance()->getRotatedLightDir().mV); +shader->uniform3fv(LLShaderMgr::WL_CAMPOSLOCAL, 1, LLViewerCamera::getInstance()->getOrigin().mV);  		shader->uniform4fv(LLShaderMgr::WATER_FOGCOLOR, 1, LLDrawPoolWater::sWaterFogColor.mV);  		shader->uniform4fv(LLShaderMgr::WATER_WATERPLANE, 1, mWaterPlane.mV);  		shader->uniform1f(LLShaderMgr::WATER_FOGDENSITY, getFogDensity()); diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp index 04d41a2512..ce9f61c0af 100755 --- a/indra/newview/llwlparammanager.cpp +++ b/indra/newview/llwlparammanager.cpp @@ -351,7 +351,7 @@ void LLWLParamManager::updateShaderUniforms(LLGLSLShader * shader)  	if (shader->mShaderGroup == LLGLSLShader::SG_DEFAULT)  	{ -		shader->uniform4fv(LLViewerShaderMgr::LIGHTNORM, 1, mRotatedLightDir.mV); +		shader->uniform4fv(LLShaderMgr::LIGHTNORM, 1, mRotatedLightDir.mV);  		shader->uniform3fv(LLShaderMgr::WL_CAMPOSLOCAL, 1, LLViewerCamera::getInstance()->getOrigin().mV);  	}  diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index ffc05b6f03..9f808776ec 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -6401,8 +6401,6 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)  		light->setDiffuse(LLColor4::black);  		light->setAmbient(LLColor4::black);  		light->setSpecular(LLColor4::black); -		light->setQuadraticAttenuation(1.f); -		light->setLinearAttenuation(1.f);  	}  	if (gAgentAvatarp &&  		gAgentAvatarp->mSpecialRenderMode == 3) | 
