summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorGraham Linden <graham@lindenlab.com>2018-07-10 18:23:02 +0100
committerGraham Linden <graham@lindenlab.com>2018-07-10 18:23:02 +0100
commit4fde1adbcf7d79bc4e80078c2f553b8ec020a1c3 (patch)
treeca1ca17a2e8b90494e018bd64402f0ad7874b36d /indra/newview
parentcafea5d9bb80669509597c6f2ee180ac29c687ab (diff)
Fix star rendering issues in ALM.
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl4
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/starsF.glsl4
-rw-r--r--indra/newview/lldrawpoolwlsky.cpp59
-rw-r--r--indra/newview/llvowlsky.cpp2
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;