Fix for black clouds on ATI (bug 1160)
http://code.google.com/p/flightgear-bugs/issues/detail?id=1160 Fix by Emilian Huminiuc.
This commit is contained in:
parent
92e10cfd30
commit
825abab643
2 changed files with 8 additions and 6 deletions
|
@ -1,5 +1,6 @@
|
||||||
uniform sampler2D baseTexture;
|
uniform sampler2D baseTexture;
|
||||||
varying float fogFactor;
|
varying float fogFactor;
|
||||||
|
varying vec4 cloudColor;
|
||||||
|
|
||||||
void main(void)
|
void main(void)
|
||||||
{
|
{
|
||||||
|
@ -7,7 +8,7 @@ void main(void)
|
||||||
if (base.a < 0.02)
|
if (base.a < 0.02)
|
||||||
discard;
|
discard;
|
||||||
|
|
||||||
vec4 finalColor = base * gl_Color;
|
vec4 finalColor = base * cloudColor;
|
||||||
gl_FragColor.rgb = mix(gl_Fog.color.rgb, finalColor.rgb, fogFactor );
|
gl_FragColor.rgb = mix(gl_Fog.color.rgb, finalColor.rgb, fogFactor );
|
||||||
gl_FragColor.a = finalColor.a;
|
gl_FragColor.a = finalColor.a;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#version 120
|
#version 120
|
||||||
|
|
||||||
varying float fogFactor;
|
varying float fogFactor;
|
||||||
|
varying vec4 cloudColor;
|
||||||
|
|
||||||
uniform float range; // From /sim/rendering/clouds3d-vis-range
|
uniform float range; // From /sim/rendering/clouds3d-vis-range
|
||||||
uniform float detail_range; // From /sim/rendering/clouds3d_detail-range
|
uniform float detail_range; // From /sim/rendering/clouds3d_detail-range
|
||||||
|
@ -48,7 +49,7 @@ void main(void)
|
||||||
// More than detail_range away, so discard all sprites on opposite side of
|
// More than detail_range away, so discard all sprites on opposite side of
|
||||||
// cloud center by shifting them beyond the view fustrum
|
// cloud center by shifting them beyond the view fustrum
|
||||||
gl_Position = vec4(0.0,0.0,10.0,1.0);
|
gl_Position = vec4(0.0,0.0,10.0,1.0);
|
||||||
gl_FrontColor.a = 0.0;
|
cloudColor = vec4(0.0);
|
||||||
} else {
|
} else {
|
||||||
// Determine a lighting normal based on the vertex position from the
|
// Determine a lighting normal based on the vertex position from the
|
||||||
// center of the cloud, so that sprite on the opposite side of the cloud to the sun are darker.
|
// center of the cloud, so that sprite on the opposite side of the cloud to the sun are darker.
|
||||||
|
@ -70,17 +71,17 @@ void main(void)
|
||||||
|
|
||||||
// Final position of the sprite
|
// Final position of the sprite
|
||||||
gl_Position = gl_ModelViewProjectionMatrix * gl_Position;
|
gl_Position = gl_ModelViewProjectionMatrix * gl_Position;
|
||||||
gl_FrontColor = gl_LightSource[0].diffuse * shade + gl_FrontLightModelProduct.sceneColor;
|
cloudColor = gl_LightSource[0].diffuse * shade + gl_FrontLightModelProduct.sceneColor;
|
||||||
|
|
||||||
if ((fogCoord > (0.9 * detail_range)) && (fogCoord > center_dist) && (shade_factor < 0.7)) {
|
if ((fogCoord > (0.9 * detail_range)) && (fogCoord > center_dist) && (shade_factor < 0.7)) {
|
||||||
// cloudlet is almost at the detail range, so fade it out.
|
// cloudlet is almost at the detail range, so fade it out.
|
||||||
gl_FrontColor.a = 1.0 - smoothstep(0.9 * detail_range, detail_range, fogCoord);
|
cloudColor.a = 1.0 - smoothstep(0.9 * detail_range, detail_range, fogCoord);
|
||||||
} else {
|
} else {
|
||||||
// As we get within 100m of the sprite, it is faded out. Equally at large distances it also fades out.
|
// As we get within 100m of the sprite, it is faded out. Equally at large distances it also fades out.
|
||||||
gl_FrontColor.a = min(smoothstep(10.0, 100.0, fogCoord), 1.0 - smoothstep(0.9 * range, range, fogCoord));
|
cloudColor.a = min(smoothstep(10.0, 100.0, fogCoord), 1.0 - smoothstep(0.9 * range, range, fogCoord));
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_BackColor = gl_FrontColor;
|
//gl_BackColor = cloudColor;
|
||||||
|
|
||||||
// Fog doesn't affect clouds as much as other objects.
|
// Fog doesn't affect clouds as much as other objects.
|
||||||
fogFactor = exp( -gl_Fog.density * fogCoord * 0.5);
|
fogFactor = exp( -gl_Fog.density * fogCoord * 0.5);
|
||||||
|
|
Loading…
Reference in a new issue