fix for bug#10196

Compute half if LOCAL_VIEWER is enabled and the light is
a directional source.
This commit is contained in:
Xiang, Haihao 2007-03-11 22:41:26 +08:00
parent 69e57cf6ae
commit 61ec23cc63
2 changed files with 16 additions and 2 deletions

View 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,

View 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,