diff --git a/indra/newview/app_settings/shaders/class1/deferred/SSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/SSAOF.glsl index 0c0a7792795732a5362e5acd158708c9c260bc90..ee070b8d4f85558468ec077252e2c5cd511c38a1 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/SSAOF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/SSAOF.glsl @@ -43,6 +43,13 @@ uniform float ssao_factor; uniform vec2 kern_scale; uniform vec2 noise_scale; +uniform float seconds60; + +float rand(vec2 co) +{ + return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); +} + vec3 decode_normal (vec2 enc) { vec2 fenc = enc*4-2; @@ -102,8 +109,13 @@ float calcAmbientOcclusion(vec4 pos, vec3 norm) vec2 samppos_screen = pos_screen + scale * reflect(getKern(i), noise_reflect); // if sample is out-of-screen then give it no weight by continuing - //if (any(lessThan(samppos_screen.xy, vec2(0.0, 0.0))) || - // any(greaterThan(samppos_screen.xy, vec2(screen_res.xy)))) continue; + if (any(lessThan(samppos_screen.xy, vec2(0.0, 0.0))) || + any(greaterThan(samppos_screen.xy, vec2(pos_screen.xy)))) + { + // Try to bring the sample back on screen + float rnd1 = rand(pos_screen.xy + vec2(33.0 * (seconds60 + i))); + samppos_screen.xy = vec2(rnd1, rand(pos_screen.yx + vec2(55.0 * (seconds60 + i)))) / kern_scale; + } vec3 samppos_world = getPosition(samppos_screen).xyz; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index c9b10509cfece76c43d96221a707329974ff5853..04508dd5f3a4fab660442e1c95fa6f119122f53d 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -7354,7 +7354,6 @@ void LLPipeline::renderBloom(bool for_snapshot, F32 zoom_factor, int subfield) shader->uniform1f(LLShaderMgr::DOF_RES_SCALE, CameraDoFResScale); shader->uniform1f(LLShaderMgr::DOF_WIDTH, CameraDoFResScale - CameraDoFResScale / dof_width); shader->uniform1f(LLShaderMgr::DOF_HEIGHT, CameraDoFResScale - CameraDoFResScale / dof_height); - shader->uniform1f(LLShaderMgr::SECONDS60, fmodf(LLTimer::getElapsedSeconds(), 60.f)); drawFullScreenRect();