Skip to content
Snippets Groups Projects
Commit 9a8e124f authored by Graham Linden's avatar Graham Linden
Browse files

SL-9976 change moon blend/brightness handling in shaders and cleanup...

SL-9976 change moon blend/brightness handling in shaders and cleanup extraneous GL state management.
parent 2f97660a
No related branches found
No related tags found
No related merge requests found
...@@ -33,9 +33,6 @@ out vec4 frag_data[3]; ...@@ -33,9 +33,6 @@ out vec4 frag_data[3];
#define frag_data gl_FragData #define frag_data gl_FragData
#endif #endif
vec3 fullbrightAtmosTransport(vec3 light);
vec3 fullbrightScaleSoftClip(vec3 light);
uniform vec4 color; uniform vec4 color;
uniform vec4 sunlight_color; uniform vec4 sunlight_color;
uniform vec3 lumWeights; uniform vec3 lumWeights;
...@@ -52,23 +49,16 @@ void main() ...@@ -52,23 +49,16 @@ void main()
vec4 moonB = texture2D(altDiffuseMap, vary_texcoord0.xy); vec4 moonB = texture2D(altDiffuseMap, vary_texcoord0.xy);
vec4 c = mix(moonA, moonB, blend_factor); vec4 c = mix(moonA, moonB, blend_factor);
if (c.a < 0.1f)
{
discard;
}
c.rgb = pow(c.rgb, vec3(0.7f));
c.rgb = fullbrightAtmosTransport(c.rgb);
c.rgb = fullbrightScaleSoftClip(c.rgb);
// mix factor which blends when sunlight is brighter // mix factor which blends when sunlight is brighter
// and shows true moon color at night // and shows true moon color at night
vec3 luma_weights = vec3(0.2, 0.3, 0.2); vec3 luma_weights = vec3(0.2, 0.3, 0.2);
float mix = 1.0f - dot(normalize(sunlight_color.rgb), luma_weights);
c.rgb = pow(c.rgb, 1.2 - vec3(mix * moon_brightness)); float mix = 1.0 - dot(normalize(sunlight_color.rgb), luma_weights);
vec3 exp = vec3(1.0 - mix * moon_brightness) * 2.0 - 1.0;
c.rgb = pow(c.rgb, exp);
frag_data[0] = vec4(c.rgb, mix * (moon_brightness + (c.a * 0.25))); frag_data[0] = vec4(c.rgb, c.a);
frag_data[1] = vec4(0.0); frag_data[1] = vec4(0.0);
frag_data[2] = vec4(0.0f); frag_data[2] = vec4(0.0f);
} }
......
...@@ -33,9 +33,6 @@ out vec4 frag_color; ...@@ -33,9 +33,6 @@ out vec4 frag_color;
#define frag_color gl_FragColor #define frag_color gl_FragColor
#endif #endif
vec3 fullbrightAtmosTransport(vec3 light);
vec3 fullbrightScaleSoftClip(vec3 light);
uniform vec4 color; uniform vec4 color;
uniform vec4 sunlight_color; uniform vec4 sunlight_color;
uniform vec3 lumWeights; uniform vec3 lumWeights;
...@@ -52,22 +49,14 @@ void main() ...@@ -52,22 +49,14 @@ void main()
vec4 moonB = texture2D(altDiffuseMap, vary_texcoord0.xy); vec4 moonB = texture2D(altDiffuseMap, vary_texcoord0.xy);
vec4 c = mix(moonA, moonB, blend_factor); vec4 c = mix(moonA, moonB, blend_factor);
if (c.a < 0.1f)
{
discard;
}
c.rgb = pow(c.rgb, vec3(0.7f));
c.rgb = fullbrightAtmosTransport(c.rgb);
c.rgb = fullbrightScaleSoftClip(c.rgb);
// mix factor which blends when sunlight is brighter // mix factor which blends when sunlight is brighter
// and shows true moon color at night // and shows true moon color at night
vec3 luma_weights = vec3(0.2, 0.3, 0.2); vec3 luma_weights = vec3(0.2, 0.3, 0.2);
float mix = 1.0f - dot(normalize(sunlight_color.rgb), luma_weights); float mix = 1.0f - dot(normalize(sunlight_color.rgb), luma_weights);
c.rgb = pow(c.rgb, 1.2 - vec3(mix * moon_brightness)); vec3 exp = vec3(1.0 - mix * moon_brightness) * 2.0 - 1.0;
c.rgb = pow(c.rgb, exp);
frag_color = vec4(c.rgb, mix * (moon_brightness + (c.a * 0.25))); frag_color = vec4(c.rgb, c.a);
} }
...@@ -631,6 +631,8 @@ void LLDrawPoolWLSky::renderHeavenlyBodies() ...@@ -631,6 +631,8 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
} }
} }
blend_factor = LLEnvironment::instance().getCurrentSky()->getBlendFactor();
face = gSky.mVOSkyp->mFace[LLVOSky::FACE_MOON]; face = gSky.mVOSkyp->mFace[LLVOSky::FACE_MOON];
if (gSky.mVOSkyp->getMoon().getDraw() && face && face->getTexture(LLRender::DIFFUSE_MAP) && face->getGeomCount() && moon_shader) if (gSky.mVOSkyp->getMoon().getDraw() && face && face->getTexture(LLRender::DIFFUSE_MAP) && face->getGeomCount() && moon_shader)
...@@ -667,7 +669,7 @@ void LLDrawPoolWLSky::renderHeavenlyBodies() ...@@ -667,7 +669,7 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
moon_shader->uniform1f(LLShaderMgr::MOON_BRIGHTNESS, moon_brightness); moon_shader->uniform1f(LLShaderMgr::MOON_BRIGHTNESS, moon_brightness);
moon_shader->uniform4fv(LLShaderMgr::DIFFUSE_COLOR, 1, color.mV); moon_shader->uniform4fv(LLShaderMgr::DIFFUSE_COLOR, 1, color.mV);
moon_shader->uniform1f(LLShaderMgr::BLEND_FACTOR, blend_factor); moon_shader->uniform1f(LLShaderMgr::BLEND_FACTOR, blend_factor);
LLFacePool::LLOverrideFaceColor color_override(this, color); LLFacePool::LLOverrideFaceColor color_override(this, color);
...@@ -738,9 +740,7 @@ void LLDrawPoolWLSky::render(S32 pass) ...@@ -738,9 +740,7 @@ void LLDrawPoolWLSky::render(S32 pass)
const F32 camHeightLocal = LLEnvironment::instance().getCamHeight(); const F32 camHeightLocal = LLEnvironment::instance().getCamHeight();
LLVector3 const & origin = LLViewerCamera::getInstance()->getOrigin(); LLVector3 const & origin = LLViewerCamera::getInstance()->getOrigin();
LLGLSPipelineBlendSkyBox sky(true, false);
renderSkyHaze(origin, camHeightLocal); renderSkyHaze(origin, camHeightLocal);
renderStars(); renderStars();
renderHeavenlyBodies(); renderHeavenlyBodies();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment