ee5befae |
1 | // This file has been automatically generated from resource file src/Shaders/RaytraceSmooth.fs |
2 | |
3 | static const char Shaders_RaytraceSmooth_fs[] = |
4 | "//! Input ray-traced image.\n" |
5 | "uniform sampler2D uFSAAInputTexture;\n" |
6 | "\n" |
7 | "//! Number of accumulated FSAA samples.\n" |
8 | "uniform int uSamples;\n" |
9 | "\n" |
10 | "//! Output pixel color.\n" |
11 | "out vec4 OutColor;\n" |
12 | "\n" |
13 | "#define LUM_DIFFERENCE 0.085f\n" |
14 | "\n" |
15 | "// =======================================================================\n" |
16 | "// function : main\n" |
17 | "// purpose :\n" |
18 | "// =======================================================================\n" |
19 | "void main (void)\n" |
20 | "{\n" |
21 | "#ifndef PATH_TRACING\n" |
22 | "\n" |
23 | " int aPixelX = int (gl_FragCoord.x);\n" |
24 | " int aPixelY = int (gl_FragCoord.y);\n" |
25 | "\n" |
26 | " // Adjust FLIPTRI pattern used for adaptive FSAA\n" |
27 | " float anOffsetX = mix (uOffsetX, -uOffsetX, float (aPixelX % 2));\n" |
28 | " float anOffsetY = mix (uOffsetY, -uOffsetY, float (aPixelY % 2));\n" |
29 | "\n" |
30 | " vec4 aClr0 = texelFetch (uFSAAInputTexture, ivec2 (aPixelX + 0, aPixelY + 0), 0);\n" |
31 | " vec4 aClr1 = texelFetch (uFSAAInputTexture, ivec2 (aPixelX + 0, aPixelY - 1), 0);\n" |
32 | " vec4 aClr2 = texelFetch (uFSAAInputTexture, ivec2 (aPixelX + 0, aPixelY + 1), 0);\n" |
33 | "\n" |
34 | " vec4 aClr3 = texelFetch (uFSAAInputTexture, ivec2 (aPixelX + 1, aPixelY + 0), 0);\n" |
35 | " vec4 aClr4 = texelFetch (uFSAAInputTexture, ivec2 (aPixelX + 1, aPixelY - 1), 0);\n" |
36 | " vec4 aClr5 = texelFetch (uFSAAInputTexture, ivec2 (aPixelX + 1, aPixelY + 1), 0);\n" |
37 | "\n" |
38 | " vec4 aClr6 = texelFetch (uFSAAInputTexture, ivec2 (aPixelX - 1, aPixelY + 0), 0);\n" |
39 | " vec4 aClr7 = texelFetch (uFSAAInputTexture, ivec2 (aPixelX - 1, aPixelY - 1), 0);\n" |
40 | " vec4 aClr8 = texelFetch (uFSAAInputTexture, ivec2 (aPixelX - 1, aPixelY + 1), 0);\n" |
41 | "\n" |
42 | " float aLum = dot (LUMA, aClr0.xyz);\n" |
43 | "\n" |
44 | " bool aRender = abs (aClr1.w - aClr0.w) > LUM_DIFFERENCE ||\n" |
45 | " abs (aClr2.w - aClr0.w) > LUM_DIFFERENCE ||\n" |
46 | " abs (aClr3.w - aClr0.w) > LUM_DIFFERENCE ||\n" |
47 | " abs (aClr4.w - aClr0.w) > LUM_DIFFERENCE ||\n" |
48 | " abs (aClr5.w - aClr0.w) > LUM_DIFFERENCE ||\n" |
49 | " abs (aClr6.w - aClr0.w) > LUM_DIFFERENCE ||\n" |
50 | " abs (aClr7.w - aClr0.w) > LUM_DIFFERENCE ||\n" |
51 | " abs (aClr8.w - aClr0.w) > LUM_DIFFERENCE;\n" |
52 | "\n" |
53 | " if (!aRender)\n" |
54 | " {\n" |
55 | " aRender = abs (dot (LUMA, aClr1.xyz) - aLum) > LUM_DIFFERENCE ||\n" |
56 | " abs (dot (LUMA, aClr2.xyz) - aLum) > LUM_DIFFERENCE ||\n" |
57 | " abs (dot (LUMA, aClr3.xyz) - aLum) > LUM_DIFFERENCE ||\n" |
58 | " abs (dot (LUMA, aClr4.xyz) - aLum) > LUM_DIFFERENCE ||\n" |
59 | " abs (dot (LUMA, aClr5.xyz) - aLum) > LUM_DIFFERENCE ||\n" |
60 | " abs (dot (LUMA, aClr6.xyz) - aLum) > LUM_DIFFERENCE ||\n" |
61 | " abs (dot (LUMA, aClr7.xyz) - aLum) > LUM_DIFFERENCE ||\n" |
62 | " abs (dot (LUMA, aClr8.xyz) - aLum) > LUM_DIFFERENCE;\n" |
63 | " }\n" |
64 | "\n" |
65 | " vec4 aColor = aClr0;\n" |
66 | "\n" |
67 | " if (aRender)\n" |
68 | " {\n" |
69 | " SRay aRay = GenerateRay (vPixel + vec2 (anOffsetX, anOffsetY));\n" |
70 | "\n" |
71 | " vec3 aInvDirect = 1.f / max (abs (aRay.Direct), SMALL);\n" |
72 | "\n" |
73 | " aInvDirect = vec3 (aRay.Direct.x < 0.f ? -aInvDirect.x : aInvDirect.x,\n" |
74 | " aRay.Direct.y < 0.f ? -aInvDirect.y : aInvDirect.y,\n" |
75 | " aRay.Direct.z < 0.f ? -aInvDirect.z : aInvDirect.z);\n" |
76 | "\n" |
77 | " aColor = mix (aClr0, clamp (Radiance (aRay, aInvDirect), 0.f, 1.f), 1.f / uSamples);\n" |
78 | " }\n" |
79 | "\n" |
80 | " OutColor = aColor;\n" |
81 | "\n" |
82 | "#endif\n" |
83 | "}\n"; |