diff --git a/indra/newview/app_settings/shaders/class2/deferred/rlvF.glsl b/indra/newview/app_settings/shaders/class1/deferred/rlvF.glsl similarity index 64% rename from indra/newview/app_settings/shaders/class2/deferred/rlvF.glsl rename to indra/newview/app_settings/shaders/class1/deferred/rlvF.glsl index 9edcf16f2b5183c208d1538eaf71c2f078aab7bd..2f99e88936104da5bf0cfde34f02e7d56839627e 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/rlvF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/rlvF.glsl @@ -1,6 +1,6 @@ /** * - * Copyright (c) 2018, Kitty Barnett + * Copyright (c) 2018-2020, Kitty Barnett * * The source code in this file is provided to you under the terms of the * GNU Lesser General Public License, version 2.1, but WITHOUT ANY WARRANTY; @@ -48,35 +48,21 @@ vec4 getPosition_d(vec2 pos_screen, float depth) void main() { - vec2 fragTC = vary_fragcoord.xy; - float fragDepth = texture2DRect(depthMap, fragTC.xy).r; + vec2 fragTC = vary_fragcoord.st; + float fragDepth = texture2DRect(depthMap, fragTC).x; vec3 fragPosLocal = getPosition_d(fragTC, fragDepth).xyz; - vec3 fragColor = texture2DRect(diffuseRect, fragTC).rgb; - { - vec2 blendStart = rlvEffectParam1.xy; - vec2 blendEnd = rlvEffectParam1.zw; - vec3 blendColor = rlvEffectParam2.rgb; + float distance = length(fragPosLocal.xyz - avPosLocal.xyz); + + vec2 sphereMinMaxDist = rlvEffectParam1.yw; + vec2 sphereMinMaxValue = rlvEffectParam1.xz; + vec3 sphereColour = rlvEffectParam2.rgb; - float cutoff = blendStart.y; - float cutoff2 = blendEnd.y; - float minAlpha = blendStart.x; - float maxAlpha = blendEnd.x; + // Linear non-branching interpolation of the strength of the sphere effect (replaces if/elseif/else for x < min, min <= x <= max and x > max) + float effectStrength = mix(sphereMinMaxValue.x, 0, distance < sphereMinMaxDist.x) + + mix(0, sphereMinMaxValue.y - sphereMinMaxValue.x, clamp((distance - sphereMinMaxDist.x) / (sphereMinMaxDist.y - sphereMinMaxDist.x), 0.0, 1.0)); - float distance = length(fragPosLocal.xyz - avPosLocal.xyz); - if (distance < cutoff) - { - discard; - } - else if (distance < cutoff2) - { - fragColor = mix(fragColor, blendColor, minAlpha + (distance - cutoff) * (maxAlpha - minAlpha) / (cutoff2 - cutoff)); - } - else - { - fragColor = mix(fragColor, blendColor, maxAlpha); - } - } + fragColor = mix(fragColor, sphereColour, effectStrength); frag_color.rgb = fragColor; frag_color.a = 0.0; diff --git a/indra/newview/app_settings/shaders/class2/deferred/rlvV.glsl b/indra/newview/app_settings/shaders/class1/deferred/rlvV.glsl similarity index 100% rename from indra/newview/app_settings/shaders/class2/deferred/rlvV.glsl rename to indra/newview/app_settings/shaders/class1/deferred/rlvV.glsl diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index f493299ccaf7026774604a86bf532737720329ae..f039a9575e3a2710dab81ad22527b21c417615d0 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -9081,8 +9081,6 @@ void LLPipeline::renderDeferredLighting() } } - mScreen.flush(); - // [RLVa:KB] - @setsphere if (RlvActions::hasBehaviour(RLV_BHVR_SETSPHERE)) { @@ -9090,7 +9088,7 @@ void LLPipeline::renderDeferredLighting() LLGLDepthTest depth(GL_FALSE, GL_FALSE); - mScreen.bindTarget(); + //mScreen.bindTarget(); gDeferredRlvProgram.bind(); S32 nDiffuseChannel = gDeferredRlvProgram.enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, mScreen.getUsage()); @@ -9115,32 +9113,8 @@ void LLPipeline::renderDeferredLighting() gGL.pushMatrix(); gGL.loadMatrix(gGLModelView); - int nRenderMethod = 0; - switch (nRenderMethod) - { - case 0: - { - LLVector2 tc1(0, 0); - LLVector2 tc2((F32)mScreen.getWidth() * 2, (F32)mScreen.getHeight() * 2); - - gGL.begin(LLRender::TRIANGLE_STRIP); - gGL.texCoord2f(tc1.mV[0], tc1.mV[1]); - gGL.vertex2f(-1, -1); - - gGL.texCoord2f(tc1.mV[0], tc2.mV[1]); - gGL.vertex2f(-1, 3); - - gGL.texCoord2f(tc2.mV[0], tc1.mV[1]); - gGL.vertex2f(3, -1); - - gGL.end(); - } - break; - case 1: - mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX); - mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3); - break; - } + mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX); + mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3); gGL.matrixMode(LLRender::MM_PROJECTION); gGL.popMatrix(); @@ -9153,9 +9127,12 @@ void LLPipeline::renderDeferredLighting() gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); gGL.getTexUnit(0)->activate(); - mScreen.flush(); + //mScreen.flush(); } // [/RLVa:KB] + + mScreen.flush(); + } void LLPipeline::renderDeferredLightingToRT(LLRenderTarget* target)