((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))))))))

))
