aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-08-06 15:48:20 +0000
committertaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-08-06 15:48:20 +0000
commit56564957104fbeaa1ba41698275a28d18a194c29 (patch)
treed8d4b41d253a4332e553d5282a4761215b3b20a1
parentaa6b6e1eb038fcc38057f81fdaa3f4225580a228 (diff)
Take shininess into account in shaders
git-svn-id: svn://cook.msm.cam.ac.uk:745/thrust3d/thrust3d@222 84d2e878-0bd5-11dd-ad15-13eda11d74c5
-rw-r--r--data/shaders/fill-light.frag3
-rw-r--r--data/shaders/fill-light.vert2
-rw-r--r--data/shaders/lighting.frag3
-rw-r--r--data/shaders/lighting.vert2
-rw-r--r--src/render.c2
5 files changed, 9 insertions, 3 deletions
diff --git a/data/shaders/fill-light.frag b/data/shaders/fill-light.frag
index 6a7044e..249c881 100644
--- a/data/shaders/fill-light.frag
+++ b/data/shaders/fill-light.frag
@@ -22,6 +22,7 @@ uniform float alpha;
varying vec3 col_ambi_diff;
varying vec3 col_emit;
+varying float shininess;
void main() {
@@ -51,7 +52,7 @@ void main() {
R = normalize(-reflect(L, norm));
diff_fac = max(0.0, dot(normalize(light2vc).xyz, norm));
spec_fac = max(0.0, dot(R, E));
- spec_fac = pow(spec_fac, 80.0);
+ spec_fac = pow(spec_fac, shininess);
diff = col_ambi_diff * gl_LightSource[2].diffuse.rgb * diff_fac;
spec = gl_LightSource[2].specular.rgb * spec_fac;
diff --git a/data/shaders/fill-light.vert b/data/shaders/fill-light.vert
index bdcb844..1688820 100644
--- a/data/shaders/fill-light.vert
+++ b/data/shaders/fill-light.vert
@@ -16,6 +16,7 @@ varying vec3 light2vc;
varying vec3 col_ambi_diff;
varying vec3 col_emit;
+varying float shininess;
void main() {
@@ -31,6 +32,7 @@ void main() {
/* Material properties */
col_ambi_diff = gl_Color.rgb;
col_emit = gl_FrontMaterial.emission.rgb;
+ shininess = gl_FrontMaterial.shininess;
/* Coordinates */
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
diff --git a/data/shaders/lighting.frag b/data/shaders/lighting.frag
index 1a20e89..e47108f 100644
--- a/data/shaders/lighting.frag
+++ b/data/shaders/lighting.frag
@@ -25,6 +25,7 @@ uniform float alpha;
varying vec3 col_ambi_diff;
varying vec3 col_emit;
+varying float shininess;
void main() {
@@ -70,7 +71,7 @@ void main() {
E = normalize(-pos);
R = normalize(-reflect(L, norm));
spec_fac = max(0.0, dot(R, E));
- spec_fac = pow(spec_fac, 80.0);
+ spec_fac = pow(spec_fac, shininess);
diff += col_ambi_diff * gl_LightSource[0].diffuse.rgb * spot * falloff * diff_fac;
spec += vec3(1.0, 1.0, 1.0) * gl_LightSource[0].specular.rgb * spot * falloff * spec_fac;
diff --git a/data/shaders/lighting.vert b/data/shaders/lighting.vert
index 32aa176..0092d66 100644
--- a/data/shaders/lighting.vert
+++ b/data/shaders/lighting.vert
@@ -18,6 +18,7 @@ varying vec3 light2vc;
varying vec3 col_ambi_diff;
varying vec3 col_emit;
+varying float shininess;
void main() {
@@ -39,6 +40,7 @@ void main() {
/* Material properties */
col_ambi_diff = gl_Color.rgb;
col_emit = gl_FrontMaterial.emission.rgb;
+ shininess = gl_FrontMaterial.shininess;
/* Coordinates */
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
diff --git a/src/render.c b/src/render.c
index 84de330..53d1716 100644
--- a/src/render.c
+++ b/src/render.c
@@ -267,7 +267,7 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC
if ( p->attribs & ATTRIB_SHINY ) {
GLfloat white[] = {1.0, 1.0, 1.0, 1.0};
glMaterialfv(GL_FRONT, GL_SPECULAR, white);
- glMaterialf(GL_FRONT, GL_SHININESS, p->shininess); /* FIXME: Shader ignores this value */
+ glMaterialf(GL_FRONT, GL_SHININESS, p->shininess);
} else {
glMaterialfv(GL_FRONT, GL_SPECULAR, black);
}