Implement 'refract' builtin.
This commit is contained in:
@@ -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,
|
||||
|
102
builtins/110/refract
Normal file
102
builtins/110/refract
Normal file
@@ -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))))))))
|
||||
|
||||
))
|
Reference in New Issue
Block a user