• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#pragma clang diagnostic ignored "-Wmissing-prototypes"
2
3#include <metal_stdlib>
4#include <simd/simd.h>
5
6using namespace metal;
7
8struct main0_out
9{
10    float FragColor [[color(0)]];
11};
12
13struct main0_in
14{
15    float3 vRefract [[user(locn0)]];
16};
17
18template<typename T>
19inline T spvReflect(T i, T n)
20{
21    return i - T(2) * i * n * n;
22}
23
24template<typename T>
25inline T spvRefract(T i, T n, T eta)
26{
27    T NoI = n * i;
28    T NoI2 = NoI * NoI;
29    T k = T(1) - eta * eta * (T(1) - NoI2);
30    if (k < T(0))
31    {
32        return T(0);
33    }
34    else
35    {
36        return eta * i - (eta * NoI + sqrt(k)) * n;
37    }
38}
39
40fragment main0_out main0(main0_in in [[stage_in]])
41{
42    main0_out out = {};
43    out.FragColor = spvRefract(in.vRefract.x, in.vRefract.y, in.vRefract.z);
44    out.FragColor += spvReflect(in.vRefract.x, in.vRefract.y);
45    out.FragColor += refract(in.vRefract.xy, in.vRefract.yz, in.vRefract.z).y;
46    out.FragColor += reflect(in.vRefract.xy, in.vRefract.zy).y;
47    return out;
48}
49
50