diff options
| author | Kenneth Graunke <kenneth@whitecape.org> | 2010-06-09 14:30:52 -0700 | 
|---|---|---|
| committer | Kenneth Graunke <kenneth@whitecape.org> | 2010-06-09 14:44:39 -0700 | 
| commit | cbd881da3fd2a68272988cf7fd21dfe006d47c8c (patch) | |
| tree | 382b76515798729f3e1a057146a06501fbc751d4 | |
| parent | 3ffedf12496d17d0bcfab847293053222e996ff8 (diff) | |
Implement 'refract' builtin.
| -rw-r--r-- | builtin_function.cpp | 106 | ||||
| -rw-r--r-- | builtins/110/refract | 102 | 
2 files changed, 208 insertions, 0 deletions
diff --git a/builtin_function.cpp b/builtin_function.cpp index c75805c782..377fd50955 100644 --- a/builtin_function.cpp +++ b/builtin_function.cpp @@ -1718,6 +1718,111 @@ static const char *builtins_110_reflect = {     "))\n"  }; +static const char *builtins_110_refract = { +   "((function refract\n" +   "   (signature float\n" +   "     (parameters\n" +   "       (declare (in) float i)\n" +   "       (declare (in) float n)\n" +   "       (declare (in) float eta))\n" +   "     ((declare () float k)\n" +   "      (assign (constant bool (1)) (var_ref k)\n" +   "              (expression float - (constant float (1.0))\n" +   "	        (expression float * (var_ref eta)\n" +   "	          (expression float * (var_ref eta)\n" +   "		    (expression float - (constant float (1.0))\n" +   "		      (expression float * \n" +   "		        (expression float dot (var_ref n) (var_ref i))\n" +   "		        (expression float dot (var_ref n) (var_ref i))))))))\n" +   "      (if (expression bool < (var_ref k) (constant float (0.0)))\n" +   "          ((return (constant float (0.0))))\n" +   "	  ((return (expression float -\n" +   "	             (expression float * (var_ref eta) (var_ref i))\n" +   "		     (expression float *\n" +   "		       (expression float +\n" +   "		         (expression float * (var_ref eta)\n" +   "			   (expression float dot (var_ref n) (var_ref i)))\n" +   "		         (expression float sqrt (var_ref k)))\n" +   "		       (var_ref n))))))))\n" +   "\n" +   "   (signature vec2\n" +   "     (parameters\n" +   "       (declare (in) vec2 i)\n" +   "       (declare (in) vec2 n)\n" +   "       (declare (in) float eta))\n" +   "     ((declare () float k)\n" +   "      (assign (constant bool (1)) (var_ref k)\n" +   "              (expression float - (constant float (1.0))\n" +   "	        (expression float * (var_ref eta)\n" +   "	          (expression float * (var_ref eta)\n" +   "		    (expression float - (constant float (1.0))\n" +   "		      (expression float * \n" +   "		        (expression float dot (var_ref n) (var_ref i))\n" +   "		        (expression float dot (var_ref n) (var_ref i))))))))\n" +   "      (if (expression bool < (var_ref k) (constant float (0.0)))\n" +   "          ((return (constant vec2 (0.0 0.0))))\n" +   "	  ((return (expression vec2 -\n" +   "	             (expression vec2 * (var_ref eta) (var_ref i))\n" +   "		     (expression vec2 *\n" +   "		       (expression float +\n" +   "		         (expression float * (var_ref eta)\n" +   "			   (expression float dot (var_ref n) (var_ref i)))\n" +   "		         (expression float sqrt (var_ref k)))\n" +   "		       (var_ref n))))))))\n" +   "\n" +   "   (signature vec3\n" +   "     (parameters\n" +   "       (declare (in) vec3 i)\n" +   "       (declare (in) vec3 n)\n" +   "       (declare (in) float eta))\n" +   "     ((declare () float k)\n" +   "      (assign (constant bool (1)) (var_ref k)\n" +   "              (expression float - (constant float (1.0))\n" +   "	        (expression float * (var_ref eta)\n" +   "	          (expression float * (var_ref eta)\n" +   "		    (expression float - (constant float (1.0))\n" +   "		      (expression float * \n" +   "		        (expression float dot (var_ref n) (var_ref i))\n" +   "		        (expression float dot (var_ref n) (var_ref i))))))))\n" +   "      (if (expression bool < (var_ref k) (constant float (0.0)))\n" +   "          ((return (constant vec3 (0.0 0.0))))\n" +   "	  ((return (expression vec3 -\n" +   "	             (expression vec3 * (var_ref eta) (var_ref i))\n" +   "		     (expression vec3 *\n" +   "		       (expression float +\n" +   "		         (expression float * (var_ref eta)\n" +   "			   (expression float dot (var_ref n) (var_ref i)))\n" +   "		         (expression float sqrt (var_ref k)))\n" +   "		       (var_ref n))))))))\n" +   "\n" +   "   (signature vec4\n" +   "     (parameters\n" +   "       (declare (in) vec4 i)\n" +   "       (declare (in) vec4 n)\n" +   "       (declare (in) float eta))\n" +   "     ((declare () float k)\n" +   "      (assign (constant bool (1)) (var_ref k)\n" +   "              (expression float - (constant float (1.0))\n" +   "	        (expression float * (var_ref eta)\n" +   "	          (expression float * (var_ref eta)\n" +   "		    (expression float - (constant float (1.0))\n" +   "		      (expression float * \n" +   "		        (expression float dot (var_ref n) (var_ref i))\n" +   "		        (expression float dot (var_ref n) (var_ref i))))))))\n" +   "      (if (expression bool < (var_ref k) (constant float (0.0)))\n" +   "          ((return (constant vec4 (0.0 0.0))))\n" +   "	  ((return (expression vec4 -\n" +   "	             (expression vec4 * (var_ref eta) (var_ref i))\n" +   "		     (expression vec4 *\n" +   "		       (expression float +\n" +   "		         (expression float * (var_ref eta)\n" +   "			   (expression float dot (var_ref n) (var_ref i)))\n" +   "		         (expression float sqrt (var_ref k)))\n" +   "		       (var_ref n))))))))\n" +   "\n" +   "))\n" +}; +  static const char *builtins_110_sign = {     "((function sign\n"     "   (signature float\n" @@ -2379,6 +2484,7 @@ static const char *functions_for_110 [] = {     builtins_110_pow,     builtins_110_radians,     builtins_110_reflect, +   builtins_110_refract,     builtins_110_sign,     builtins_110_sin,     builtins_110_smoothstep, diff --git a/builtins/110/refract b/builtins/110/refract new file mode 100644 index 0000000000..e9b1475294 --- /dev/null +++ b/builtins/110/refract @@ -0,0 +1,102 @@ +((function refract +   (signature float +     (parameters +       (declare (in) float i) +       (declare (in) float n) +       (declare (in) float eta)) +     ((declare () float k) +      (assign (constant bool (1)) (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 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 dot (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 (constant bool (1)) (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 (constant bool (1)) (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)))) +	  ((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 (constant bool (1)) (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)))) +	  ((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)))))))) + +))  | 
