summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorGraham Linden <graham@lindenlab.com>2018-10-22 19:23:10 +0100
committerGraham Linden <graham@lindenlab.com>2018-10-22 19:23:10 +0100
commitdba9521cf6e2b14a345f7e4a2554e536fb69feff (patch)
tree31e0705b6c752f8eeadb6b4c56b7dab12710008e /indra
parent91615351b56cbf36ef26fdd05fb3212414a2d679 (diff)
SL-9806
Get dome rendering to not assert the depth test state behind deferred render's back. Make clouds write and test depth to give stars something to depth test against. Add z-bias in star vert shader to force some depth testing of stars against clouds.
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/starsV.glsl8
-rw-r--r--indra/newview/lldrawpoolwlsky.cpp12
-rw-r--r--indra/newview/llvowlsky.cpp4
3 files changed, 17 insertions, 7 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl
index e14d02a4a9..bb2a2ee72b 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl
@@ -38,7 +38,13 @@ VARYING vec2 screenpos;
void main()
{
//transform vertex
- gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0);
+ vec4 pos = modelview_projection_matrix * vec4(position, 1.0);
+
+// bias z to fix SL-9806 and get stars to depth test against clouds
+ pos.z += 0.001f;
+
+ gl_Position = pos;
+
float t = mod(time, 1.25f);
screenpos = position.xy * vec2(t, t);
vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index b9e041a3d5..c4560e89f4 100644
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -325,6 +325,8 @@ void LLDrawPoolWLSky::renderStarsDeferred(void) const
{
LLGLSPipelineSkyBox gls_sky;
LLGLEnable blend(GL_BLEND);
+ LLGLDepthTest depth_test(GL_TRUE, GL_FALSE, GL_LESS);
+
gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
F32 star_alpha = LLEnvironment::instance().getCurrentSky()->getStarBrightness() / 500.0f;
@@ -386,6 +388,7 @@ void LLDrawPoolWLSky::renderSkyClouds(const LLVector3& camPosLocal, F32 camHeigh
{
if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS) && gSky.mVOSkyp->getCloudNoiseTex())
{
+ LLGLDepthTest depth(GL_TRUE, GL_TRUE);
LLGLEnable blend(GL_BLEND);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
@@ -549,22 +552,21 @@ void LLDrawPoolWLSky::renderDeferred(S32 pass)
if (gPipeline.canUseWindLightShaders())
{
{
+ // Disable depth-writes 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())
{
- //LLGLSquashToFarClip far_clip(get_current_projection());
renderSkyHazeDeferred(origin, camHeightLocal);
}
else
{
- // 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
- renderSkyHaze(origin, camHeightLocal);
-
+ renderSkyHaze(origin, camHeightLocal);
}
renderHeavenlyBodies();
}
+
renderSkyClouds(origin, camHeightLocal);
}
gGL.setColorMask(true, true);
diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp
index a8bc8d4d45..b4b6bb252f 100644
--- a/indra/newview/llvowlsky.cpp
+++ b/indra/newview/llvowlsky.cpp
@@ -299,7 +299,9 @@ void LLVOWLSky::drawDome(void)
updateGeometry(mDrawable);
}
- LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
+ // This is handled upstream now as we may make different decisions
+ // for some dome users (the sky) than for others (the clouds)
+ //LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
const U32 data_mask = LLDrawPoolWLSky::SKY_VERTEX_DATA_MASK;