((function refract (signature float (parameters (declare (in) float i) (declare (in) float n) (declare (in) float eta)) ((declare () float k) (assign (x) (var_ref k) (expression float - (constant float (1.0)) (expression float * (var_ref eta) (expression float * (var_ref eta) (expression float - (constant float (1.0)) (expression float * (expression float * (var_ref n) (var_ref i)) (expression float * (var_ref n) (var_ref i)))))))) (if (expression bool < (var_ref k) (constant float (0.0))) ((return (constant float (0.0)))) ((return (expression float - (expression float * (var_ref eta) (var_ref i)) (expression float * (expression float + (expression float * (var_ref eta) (expression float * (var_ref n) (var_ref i))) (expression float sqrt (var_ref k))) (var_ref n)))))))) (signature vec2 (parameters (declare (in) vec2 i) (declare (in) vec2 n) (declare (in) float eta)) ((declare () float k) (assign (x) (var_ref k) (expression float - (constant float (1.0)) (expression float * (var_ref eta) (expression float * (var_ref eta) (expression float - (constant float (1.0)) (expression float * (expression float dot (var_ref n) (var_ref i)) (expression float dot (var_ref n) (var_ref i)))))))) (if (expression bool < (var_ref k) (constant float (0.0))) ((return (constant vec2 (0.0 0.0)))) ((return (expression vec2 - (expression vec2 * (var_ref eta) (var_ref i)) (expression vec2 * (expression float + (expression float * (var_ref eta) (expression float dot (var_ref n) (var_ref i))) (expression float sqrt (var_ref k))) (var_ref n)))))))) (signature vec3 (parameters (declare (in) vec3 i) (declare (in) vec3 n) (declare (in) float eta)) ((declare () float k) (assign (x) (var_ref k) (expression float - (constant float (1.0)) (expression float * (var_ref eta) (expression float * (var_ref eta) (expression float - (constant float (1.0)) (expression float * (expression float dot (var_ref n) (var_ref i)) (expression float dot (var_ref n) (var_ref i)))))))) (if (expression bool < (var_ref k) (constant float (0.0))) ((return (constant vec3 (0.0 0.0 0.0)))) ((return (expression vec3 - (expression vec3 * (var_ref eta) (var_ref i)) (expression vec3 * (expression float + (expression float * (var_ref eta) (expression float dot (var_ref n) (var_ref i))) (expression float sqrt (var_ref k))) (var_ref n)))))))) (signature vec4 (parameters (declare (in) vec4 i) (declare (in) vec4 n) (declare (in) float eta)) ((declare () float k) (assign (x) (var_ref k) (expression float - (constant float (1.0)) (expression float * (var_ref eta) (expression float * (var_ref eta) (expression float - (constant float (1.0)) (expression float * (expression float dot (var_ref n) (var_ref i)) (expression float dot (var_ref n) (var_ref i)))))))) (if (expression bool < (var_ref k) (constant float (0.0))) ((return (constant vec4 (0.0 0.0 0.0 0.0)))) ((return (expression vec4 - (expression vec4 * (var_ref eta) (var_ref i)) (expression vec4 * (expression float + (expression float * (var_ref eta) (expression float dot (var_ref n) (var_ref i))) (expression float sqrt (var_ref k))) (var_ref n)))))))) ))