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 | |
| parent | cafea5d9bb80669509597c6f2ee180ac29c687ab (diff) | |
Fix star rendering issues in ALM.
| -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; | 
