diff options
author | Graham Linden <graham@lindenlab.com> | 2018-07-10 18:23:02 +0100 |
---|---|---|
committer | Graham Linden <graham@lindenlab.com> | 2018-07-10 18:23:02 +0100 |
commit | 4fde1adbcf7d79bc4e80078c2f553b8ec020a1c3 (patch) | |
tree | ca1ca17a2e8b90494e018bd64402f0ad7874b36d /indra/newview | |
parent | cafea5d9bb80669509597c6f2ee180ac29c687ab (diff) |
Fix star rendering issues in ALM.
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl | 4 | ||||
-rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/starsF.glsl | 4 | ||||
-rw-r--r-- | indra/newview/lldrawpoolwlsky.cpp | 59 | ||||
-rw-r--r-- | indra/newview/llvowlsky.cpp | 2 |
4 files changed, 45 insertions, 24 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl index 1a4cdff23d..3f81e3b0af 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl @@ -94,6 +94,10 @@ void main() alpha1 = 1. - alpha1 * alpha1; alpha1 = 1. - alpha1 * alpha1; + if (alpha1 < 0.001f) + { + discard; + } // Compute alpha2, for self shadowing effect // (1 - alpha2) will later be used as percentage of incoming sunlight diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl index 9260075262..7f55d020d4 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl @@ -36,10 +36,12 @@ VARYING vec2 vary_texcoord0; uniform sampler2D diffuseMap; uniform float custom_alpha; +uniform vec4 sunlight_color; void main() { - vec4 col = vertex_color * texture2D(diffuseMap, vary_texcoord0.xy); + vec4 col = texture2D(diffuseMap, vary_texcoord0.xy); + col.rgb *= vertex_color.rgb; col.a *= custom_alpha; frag_color = col; } diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp index 90d017dd0b..8c9207a6de 100644 --- a/indra/newview/lldrawpoolwlsky.cpp +++ b/indra/newview/lldrawpoolwlsky.cpp @@ -273,7 +273,7 @@ void LLDrawPoolWLSky::renderStarsDeferred(void) const { LLGLSPipelineSkyBox gls_sky; LLGLEnable blend(GL_BLEND); - gGL.setSceneBlendType(LLRender::BT_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA); // *LAPRAS F32 star_alpha = LLEnvironment::instance().getCurrentSky()->getStarBrightness() / (2.f + ((rand() >> 16)/65535.0f)); // twinkle twinkle @@ -286,8 +286,12 @@ void LLDrawPoolWLSky::renderStarsDeferred(void) const } gDeferredStarProgram.bind(); + + gGL.getTexUnit(0)->bind(gSky.mVOSkyp->getBloomTex()); + gDeferredStarProgram.uniform1f(sCustomAlpha, star_alpha); gSky.mVOWLSkyp->drawStars(); + gDeferredStarProgram.unbind(); } @@ -318,6 +322,10 @@ void LLDrawPoolWLSky::renderHeavenlyBodies() LLGLEnable blend_on(GL_BLEND); gPipeline.disableLights(); + LLVector3 const & origin = LLViewerCamera::getInstance()->getOrigin(); + gGL.pushMatrix(); + gGL.translatef(origin.mV[0], origin.mV[1], origin.mV[2]); + LLFace * face = gSky.mVOSkyp->mFace[LLVOSky::FACE_SUN]; F32 blend_factor = LLEnvironment::instance().getCurrentSky()->getBlendFactor(); @@ -427,7 +435,9 @@ void LLDrawPoolWLSky::renderHeavenlyBodies() { moon_shader->unbind(); } - } + } + + gGL.popMatrix(); } void LLDrawPoolWLSky::renderDeferred(S32 pass) @@ -438,11 +448,9 @@ void LLDrawPoolWLSky::renderDeferred(S32 pass) } LL_RECORD_BLOCK_TIME(FTM_RENDER_WL_SKY); - const F32 camHeightLocal = LLEnvironment::instance().getCamHeight(); - LLGLSNoFog disableFog; - LLGLDepthTest depth(GL_TRUE, GL_FALSE); + LLGLSNoFog disableFog; LLGLDisable clip(GL_CLIP_PLANE0); gGL.setColorMask(true, false); @@ -453,39 +461,46 @@ void LLDrawPoolWLSky::renderDeferred(S32 pass) if (gPipeline.canUseWindLightShaders()) { - if (gPipeline.useAdvancedAtmospherics()) { - renderSkyHazeDeferred(origin, camHeightLocal); + // Disable depth-test for sky, but re-enable depth writes for the cloud + // rendering below so the cloud shader can write out depth for the stars to test against + LLGLDepthTest depth(GL_TRUE, GL_FALSE); + if (gPipeline.useAdvancedAtmospherics()) + { + renderSkyHazeDeferred(origin, camHeightLocal); + } + else + { + renderSkyHaze(origin, camHeightLocal); + + } + renderHeavenlyBodies(); } - else - { - renderSkyHaze(origin, camHeightLocal); - - gGL.pushMatrix(); - gGL.translatef(origin.mV[0], origin.mV[1], origin.mV[2]); - renderHeavenlyBodies(); - - gGL.popMatrix(); - } + renderSkyClouds(origin, camHeightLocal); } gGL.setColorMask(true, true); } void LLDrawPoolWLSky::renderPostDeferred(S32 pass) { - const F32 camHeightLocal = LLEnvironment::instance().getCamHeight(); - LLVector3 const & origin = LLViewerCamera::getInstance()->getOrigin(); - gGL.pushMatrix(); + LLGLSNoFog disableFog; + LLGLDisable clip(GL_CLIP_PLANE0); + LLGLSquashToFarClip far_clip(get_current_projection()); + + gGL.pushMatrix(); gGL.translatef(origin.mV[0], origin.mV[1], origin.mV[2]); + gGL.setColorMask(true, false); + // would be nice to do this here, but would need said bodies + // to render at a realistic distance for depth-testing against the clouds... + //renderHeavenlyBodies(); renderStarsDeferred(); gGL.popMatrix(); - - renderSkyClouds(origin, camHeightLocal); + gGL.setColorMask(true, true); } void LLDrawPoolWLSky::render(S32 pass) diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp index bdef2ed9fb..db9452cce9 100644 --- a/indra/newview/llvowlsky.cpp +++ b/indra/newview/llvowlsky.cpp @@ -36,7 +36,7 @@ #include "llenvironment.h" #include "llsettingssky.h" -const F32 LLVOWLSky::DISTANCE_TO_STARS = (HORIZON_DIST - 10.f)*0.25f; +const F32 LLVOWLSky::DISTANCE_TO_STARS = (HORIZON_DIST - 10.f) * 0.8f; const U32 LLVOWLSky::MIN_SKY_DETAIL = 3; const U32 LLVOWLSky::MAX_SKY_DETAIL = 180; |