Signed-off-by: Paul Gofman gofmanp@gmail.com --- v3: - output 'w' component unchanged in case of zero norm.
dlls/wined3d/glsl_shader.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index f2fa18dba8..45272a05bc 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -4268,7 +4268,12 @@ static void shader_glsl_nrm(const struct wined3d_shader_instruction *ins) src_param.param_str, src_param.param_str); shader_glsl_append_dst(buffer, ins);
- if (mask_size > 1) + if (mask_size == 4) + { + shader_addline(buffer, "tmp0.x == 0.0 ? vec4(vec3(0.0), %s[3]) : (%s * inversesqrt(tmp0.x)));\n", + src_param.param_str, src_param.param_str); + } + else if (mask_size > 1) { shader_addline(buffer, "tmp0.x == 0.0 ? vec%u(0.0) : (%s * inversesqrt(tmp0.x)));\n", mask_size, src_param.param_str);