fix shader bugs on ATI hardware
The main problem was using gl_FrontMaterial.ambient with a color mode of AMBIENT_AND_DIFFUSE i.e., the fixed function path would take both the ambient colors from the vertex color value. Also, some vertex shaders were not writing gl_FrontColor even though the fragment shader was accessing gl_Color. Author: Tim Moore <timoore@redhat.com>
This commit is contained in:
parent
d3a40c83c8
commit
421ee253e6
5 changed files with 8 additions and 5 deletions
|
@ -59,7 +59,7 @@ void main (void)
|
|||
c1 = mix(c1, clamp(n+nvL[2]*4.1+vec4(0.1, 0.1, nvL[2]*2.2, 1.0), 0.7, 1.0), smoothstep(snowlevel+300.0, snowlevel+360.0, (rawpos.z)+nvL[1]*3000.0));
|
||||
|
||||
vec3 diffuse = gl_FrontMaterial.diffuse.rgb * max(0.0, dot(VNormal, gl_LightSource[0].position.xyz));
|
||||
vec4 ambientColor = gl_FrontLightModelProduct.sceneColor + gl_LightSource[0].ambient * gl_FrontMaterial.ambient;
|
||||
vec4 ambientColor = gl_Color;
|
||||
// ambientColor = vec4(0.01);
|
||||
vec4 ambient_light = ambientColor + gl_LightSource[0].diffuse * vec4(diffuse, 1.0);
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ void main(void)
|
|||
ecPosition = gl_ModelViewMatrix * gl_Vertex;
|
||||
VNormal = normalize(gl_NormalMatrix * gl_Normal);
|
||||
Normal = normalize(gl_Normal);
|
||||
|
||||
gl_FrontColor = gl_FrontMaterial.emission
|
||||
+ gl_Color * (gl_LightModel.ambient + gl_LightSource[0].ambient);
|
||||
gl_Position = ftransform();
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ void main()
|
|||
halfVector = normalize(gl_LightSource[0].halfVector.xyz);
|
||||
diffuse = gl_Color * gl_LightSource[0].diffuse;
|
||||
alpha = gl_Color.a;
|
||||
constantColor = gl_FrontLightModelProduct.sceneColor
|
||||
+ gl_FrontMaterial.ambient * gl_LightSource[0].ambient;
|
||||
constantColor = gl_FrontMaterial.emission
|
||||
+ gl_Color * (gl_LightModel.ambient + gl_LightSource[0].ambient);
|
||||
fogCoord = abs(ecPosition.z);
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ void main (void)
|
|||
c1 = mix(c1, clamp(n+nvL[2]*4.1+vec4(0.1, 0.1, nvL[2]*2.2, 1.0), 0.7, 1.0), smoothstep(snowlevel+300.0, snowlevel+360.0, (rawpos.z)+nvL[1]*3000.0));
|
||||
|
||||
vec3 diffuse = gl_FrontMaterial.diffuse.rgb * max(0.0, dot(normalize(VNormal), gl_LightSource[0].position.xyz));
|
||||
vec4 ambientColor = gl_FrontLightModelProduct.sceneColor + gl_LightSource[0].ambient * gl_FrontMaterial.ambient;
|
||||
vec4 ambientColor = gl_Color;
|
||||
// ambientColor = vec4(0.01);
|
||||
vec4 ambient_light = ambientColor + gl_LightSource[0].diffuse * vec4(diffuse, 1.0);
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@ void main(void)
|
|||
VNormal = normalize(gl_NormalMatrix * gl_Normal);
|
||||
Normal = normalize(gl_Normal);
|
||||
|
||||
gl_FrontColor = gl_FrontMaterial.emission
|
||||
+ gl_Color * (gl_LightModel.ambient + gl_LightSource[0].ambient);
|
||||
gl_Position = ftransform();
|
||||
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue