diff options
author | Dave Parks <davep@lindenlab.com> | 2010-11-30 04:26:44 -0600 |
---|---|---|
committer | Dave Parks <davep@lindenlab.com> | 2010-11-30 04:26:44 -0600 |
commit | 7166b4009f738281cfacbb9b5810dfba360ec2fd (patch) | |
tree | d20db5949997c5a8b0c15e625905387b117abb00 | |
parent | d5227c6dd155081acb5c3ed0d333f0918ba886ca (diff) |
Ditch fake anti-aliasing for deferred rendering.
-rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl | 51 | ||||
-rw-r--r-- | indra/newview/pipeline.cpp | 8 |
2 files changed, 4 insertions, 55 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl index a379910101..77e3e41ea4 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl @@ -68,7 +68,6 @@ void main() depth[0] = getDepth(tc); vec4 diff = texture2DRect(diffuseRect, vary_fragcoord.xy); - bool do_aa = true; if (depth[0] < far_focal_distance) { //pixel is behind far focal plane @@ -82,7 +81,6 @@ void main() while (sc > 1.0) { - do_aa = false; dofSample(diff,w, fd, sc,sc); dofSample(diff,w, fd, -sc,sc); dofSample(diff,w, fd, sc,-sc); @@ -112,7 +110,6 @@ void main() fd = depth[0]; while (sc > 1.0) { - do_aa = false; dofSampleNear(diff,w, sc,sc); dofSampleNear(diff,w, -sc,sc); dofSampleNear(diff,w, sc,-sc); @@ -128,54 +125,8 @@ void main() } diff /= w; } - - if (do_aa) - { - depth[1] = getDepth(tc+vec2(sc,sc)); - depth[2] = getDepth(tc+vec2(-sc,-sc)); - depth[3] = getDepth(tc+vec2(-sc,sc)); - depth[4] = getDepth(tc+vec2(sc, -sc)); - - - vec2 de; - de.x = (depth[0]-depth[1]) + (depth[0]-depth[2]); - de.y = (depth[0]-depth[3]) + (depth[0]-depth[4]); - de /= depth[0]; - de *= de; - de = step(depth_cutoff, de); - - vec2 ne; - vec3 nexnorm = texture2DRect(normalMap, tc+vec2(-sc,-sc)).rgb; - nexnorm = vec3((nexnorm.xy-0.5)*2.0,nexnorm.z); // unpack norm - ne.x = dot(nexnorm, norm); - vec3 neynorm = texture2DRect(normalMap, tc+vec2(sc,sc)).rgb; - neynorm = vec3((neynorm.xy-0.5)*2.0,neynorm.z); // unpack norm - ne.y = dot(neynorm, norm); - - ne = 1.0-ne; - - ne = step(norm_cutoff, ne); - - float edge_weight = clamp(dot(de,de)+dot(ne,ne), 0.0, 1.0); - //edge_weight *= 0.0; - - //diff.r = edge_weight; - - if (edge_weight > 0.0) - { - diff += texture2DRect(diffuseRect, vary_fragcoord.xy+vec2(1,1))*edge_weight; - diff += texture2DRect(diffuseRect, vary_fragcoord.xy+vec2(-1,-1))*edge_weight; - diff += texture2DRect(diffuseRect, vary_fragcoord.xy+vec2(-1,1))*edge_weight; - diff += texture2DRect(diffuseRect, vary_fragcoord.xy+vec2(1,-1))*edge_weight; - diff += texture2DRect(diffuseRect, vary_fragcoord.xy+vec2(-1,0))*edge_weight; - diff += texture2DRect(diffuseRect, vary_fragcoord.xy+vec2(1,0))*edge_weight; - diff += texture2DRect(diffuseRect, vary_fragcoord.xy+vec2(0,1))*edge_weight; - diff += texture2DRect(diffuseRect, vary_fragcoord.xy+vec2(0,-1))*edge_weight; - diff /= 1.0+edge_weight*8.0; - } - } } - + vec4 bloom = texture2D(bloomMap, vary_fragcoord.xy/screen_res); gl_FragColor = diff + bloom; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 1ebc0a6a09..78d1044ff3 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -582,7 +582,6 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) BOOL ssao = gSavedSettings.getBOOL("RenderDeferredSSAO"); bool gi = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED); - samples = llmin(samples, (U32) 8); //cap multisample buffers to 8 samples when rendering deferred //allocate deferred rendering color buffers mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); @@ -693,9 +692,8 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) } - if (LLRenderTarget::sUseFBO && !sRenderDeferred && gGLManager.mHasFramebufferMultisample && samples > 1) - { // DON'T use multisample buffers when rendering deferred -- multisampling doesn't play nice with deferred rendering - //so a post-effect smooths edges in screen space + if (LLRenderTarget::sUseFBO && gGLManager.mHasFramebufferMultisample && samples > 1) + { mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples); if (LLPipeline::sRenderDeferred) { @@ -6372,7 +6370,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) if (channel > -1) { mScreen.bindTexture(0, channel); - gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); + gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); } gGL.begin(LLRender::TRIANGLE_STRIP); |