aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-08-06 21:49:27 +0000
committertaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-08-06 21:49:27 +0000
commit22f17f52f8d8f08f2546a1552e5075d4895d6937 (patch)
tree950f7715223662932cdcb9f575b57c9a56554658
parent51a0182adf818c30df20c95c4f5370b07fa8bcb0 (diff)
Fixes for ATI fussiness
git-svn-id: svn://cook.msm.cam.ac.uk:745/thrust3d/thrust3d@226 84d2e878-0bd5-11dd-ad15-13eda11d74c5
-rw-r--r--data/shaders/fill-light.frag2
-rw-r--r--data/shaders/lighting.frag23
-rw-r--r--src/render.c3
-rw-r--r--src/shaderutils.c1
4 files changed, 16 insertions, 13 deletions
diff --git a/data/shaders/fill-light.frag b/data/shaders/fill-light.frag
index eb89c79..975e403 100644
--- a/data/shaders/fill-light.frag
+++ b/data/shaders/fill-light.frag
@@ -41,7 +41,7 @@ void main() {
norm = normalize(normal);
/* Ambient */
- ambi = min(1.0, col_ambi_diff * (gl_LightModel.ambient.rgb + vec3(0.5, 0.5, 0.5)));
+ ambi = col_ambi_diff * (gl_LightModel.ambient.rgb + vec3(0.5, 0.5, 0.5));
/* Emission */
emit = col_emit;
diff --git a/data/shaders/lighting.frag b/data/shaders/lighting.frag
index 48c6cf0..bf03dbb 100644
--- a/data/shaders/lighting.frag
+++ b/data/shaders/lighting.frag
@@ -35,12 +35,6 @@ void main() {
vec3 L, E, R;
vec3 tex;
- tex = texture2D(texture, gl_TexCoord[0].st).rgb;
- if ( texture_emits ) {
- gl_FragColor = vec4(tex.r, tex.g, tex.b, alpha);
- return; /* Bail out early in this case */
- }
-
diff = vec3(0.0, 0.0, 0.0);
spec = vec3(0.0, 0.0, 0.0);
@@ -62,7 +56,7 @@ void main() {
spot = pow(spot, gl_LightSource[0].spotExponent);
/* Ambient */
- ambi = col_ambi_diff * (gl_LightModel.ambient.rgb + gl_LightSource[0].ambient*spot*falloff);
+ ambi = col_ambi_diff * (gl_LightModel.ambient.rgb + gl_LightSource[0].ambient.rgb * spot * falloff);
/* Diffuse */
diff_fac = max(0.0, dot(normalize(light0vc).xyz, norm));
@@ -79,10 +73,15 @@ void main() {
/* Light 1: Diffuse background glow */
diff += col_ambi_diff * gl_LightSource[1].diffuse.rgb * max(0.0, dot(vec3(light1vc), norm));
- gl_FragColor = vec4(min(tex.r * (ambi.r + diff.r) + spec.r, 1.0),
- min(tex.g * (ambi.g + diff.g) + spec.g, 1.0),
- min(tex.b * (ambi.b + diff.b) + spec.b, 1.0),
- alpha);
-
+ tex = texture2D(texture, gl_TexCoord[0].st).rgb;
+ if ( texture_emits ) {
+ gl_FragColor = vec4(tex.r, tex.g, tex.b, alpha);
+ } else {
+ gl_FragColor = vec4(min(tex.r * (ambi.r + diff.r) + spec.r, 1.0),
+ min(tex.g * (ambi.g + diff.g) + spec.g, 1.0),
+ min(tex.b * (ambi.b + diff.b) + spec.b, 1.0),
+ alpha);
+ }
+
}
diff --git a/src/render.c b/src/render.c
index e3b5a44..d7ca6db 100644
--- a/src/render.c
+++ b/src/render.c
@@ -32,6 +32,7 @@
static void render_load_shaders(RenderContext *r) {
/* Lighting */
+ printf("Loading lighting shader\n");
r->lighting_vert = shaderutils_load_shader(DATADIR"/shaders/lighting.vert", GL_VERTEX_SHADER);
r->lighting_frag = shaderutils_load_shader(DATADIR"/shaders/lighting.frag", GL_FRAGMENT_SHADER);
r->lighting_program = glCreateProgram();
@@ -41,6 +42,7 @@ static void render_load_shaders(RenderContext *r) {
shaderutils_validate_program(r->lighting_program);
/* Fill-in light */
+ printf("Loading fill lighting shader\n");
r->fill_vert = shaderutils_load_shader(DATADIR"/shaders/fill-light.vert", GL_VERTEX_SHADER);
r->fill_frag = shaderutils_load_shader(DATADIR"/shaders/fill-light.frag", GL_FRAGMENT_SHADER);
r->fill_program = glCreateProgram();
@@ -50,6 +52,7 @@ static void render_load_shaders(RenderContext *r) {
shaderutils_validate_program(r->fill_program);
/* Swirlyness */
+ printf("Loading swirlytron shader\n");
r->swirly_vert = shaderutils_load_shader(DATADIR"/shaders/swirlytron.vert", GL_VERTEX_SHADER);
r->swirly_frag = shaderutils_load_shader(DATADIR"/shaders/swirlytron.frag", GL_FRAGMENT_SHADER);
r->swirly_program = glCreateProgram();
diff --git a/src/shaderutils.c b/src/shaderutils.c
index 74e9bff..6db4212 100644
--- a/src/shaderutils.c
+++ b/src/shaderutils.c
@@ -57,6 +57,7 @@ GLuint shaderutils_load_shader(const char *filename, GLenum type) {
glCompileShader(shader);
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
if ( status == GL_FALSE ) {
+ printf("Problems loading '%s':\n", filename);
glGetShaderInfoLog(shader, 4095, &l, text);
if ( l > 0 ) {
printf("%s\n", text); fflush(stdout);