fix for bug#10196
authorXiang, Haihao <haihao.xiang@intel.com>
Sun, 11 Mar 2007 14:41:26 +0000 (22:41 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Sun, 11 Mar 2007 14:41:26 +0000 (22:41 +0800)
Compute half if LOCAL_VIEWER is enabled and the light is
a directional source.

src/mesa/drivers/dri/i965/brw_vs_tnl.c
src/mesa/tnl/t_vp_build.c

index 0d61092..c05a9b5 100644 (file)
@@ -988,7 +988,14 @@ static void build_lighting( struct tnl_program *p )
             */
            VPpli = register_param3(p, STATE_LIGHT, i, 
                                    STATE_POSITION_NORMALIZED); 
-           half = register_param3(p, STATE_LIGHT, i, STATE_HALF);
+            if (p->state->light_local_viewer) {
+                struct ureg eye_hat = get_eye_position_normalized(p);
+                half = get_temp(p);
+                emit_op2(p, OPCODE_SUB, half, 0, VPpli, eye_hat);
+                emit_normalize_vec3(p, half, half);
+            } else {
+                half = register_param3(p, STATE_LIGHT, i, STATE_HALF);
+            }
         } 
         else {
            struct ureg Ppli = register_param3(p, STATE_LIGHT, i, 
index 81266f3..2a97a1c 100644 (file)
@@ -939,7 +939,14 @@ static void build_lighting( struct tnl_program *p )
             */
            VPpli = register_param3(p, STATE_LIGHT, i, 
                                    STATE_POSITION_NORMALIZED); 
-           half = register_param3(p, STATE_LIGHT, i, STATE_HALF);
+            if (p->state->light_local_viewer) {
+                struct ureg eye_hat = get_eye_position_normalized(p);
+                half = get_temp(p);
+                emit_op2(p, OPCODE_SUB, half, 0, VPpli, eye_hat);
+                emit_normalize_vec3(p, half, half);
+            } else {
+                half = register_param3(p, STATE_LIGHT, i, STATE_HALF);
+            }
         } 
         else {
            struct ureg Ppli = register_param3(p, STATE_LIGHT, i,