summaryrefslogtreecommitdiff
path: root/src/mesa/shader
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2005-04-15 12:57:23 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2005-04-15 12:57:23 +0000
commit78803b2667c1dfe1dc47e09b61a4c29303e09d0b (patch)
treee77fb3e2816280155e7bcbf1c8283d0ad4a2c62c /src/mesa/shader
parenta131d50fb76cfa4c129c2a9d6ec2a0c83d51b85a (diff)
Fix alpha value of STATE_LIGHTMODEL_SCENECOLOR. From the spec:
The "w" component of the program parameter variable is filled with the alpha component of the front diffuse material color. Make sure matrix inverses are uptodate also.
Diffstat (limited to 'src/mesa/shader')
-rw-r--r--src/mesa/shader/program.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c
index 2d398212eb..e406e1090c 100644
--- a/src/mesa/shader/program.c
+++ b/src/mesa/shader/program.c
@@ -648,20 +648,22 @@ _mesa_fetch_state(GLcontext *ctx, const enum state_index state[],
if (state[1] == 0) {
/* front */
GLint i;
- for (i = 0; i < 4; i++) {
+ for (i = 0; i < 3; i++) {
value[i] = ctx->Light.Model.Ambient[i]
* ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_AMBIENT][i]
+ ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_EMISSION][i];
}
+ value[3] = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_DIFFUSE][3];
}
else {
/* back */
GLint i;
- for (i = 0; i < 4; i++) {
+ for (i = 0; i < 3; i++) {
value[i] = ctx->Light.Model.Ambient[i]
* ctx->Light.Material.Attrib[MAT_ATTRIB_BACK_AMBIENT][i]
+ ctx->Light.Material.Attrib[MAT_ATTRIB_BACK_EMISSION][i];
}
+ value[3] = ctx->Light.Material.Attrib[MAT_ATTRIB_BACK_DIFFUSE][3];
}
return;
case STATE_LIGHTPROD:
@@ -806,7 +808,9 @@ _mesa_fetch_state(GLcontext *ctx, const enum state_index state[],
}
if (modifier == STATE_MATRIX_INVERSE ||
modifier == STATE_MATRIX_INVTRANS) {
- /* XXX be sure inverse is up to date */
+ /* Be sure inverse is up to date:
+ */
+ _math_matrix_analyse( matrix );
m = matrix->inv;
}
else {