|
|
@@ -13,8 +13,8 @@ const UVec2 WORKGROUP_SIZE = UVec2(16u, 16u);
|
|
|
layout(local_size_x = WORKGROUP_SIZE.x, local_size_y = WORKGROUP_SIZE.y, local_size_z = 1) in;
|
|
|
|
|
|
layout(set = 0, binding = 0) uniform sampler u_linearAnyClampSampler;
|
|
|
-layout(set = 0, binding = 1) uniform texture2D u_tex;
|
|
|
-layout(set = 0, binding = 2) uniform texture2D u_lensDirtTex;
|
|
|
+layout(set = 0, binding = 1) uniform ANKI_RP texture2D u_tex;
|
|
|
+layout(set = 0, binding = 2) uniform ANKI_RP texture2D u_lensDirtTex;
|
|
|
|
|
|
layout(set = 0, binding = 3) writeonly uniform image2D out_img;
|
|
|
|
|
|
@@ -27,20 +27,20 @@ const F32 CHROMATIC_DISTORTION = 3.0;
|
|
|
#define ENABLE_HALO 1
|
|
|
const F32 HALO_OPACITY = 0.5;
|
|
|
|
|
|
-Vec3 textureDistorted(texture2D tex, sampler sampl, Vec2 uv,
|
|
|
- Vec2 direction, // direction of DISTORTION
|
|
|
- Vec3 DISTORTION) // per-channel DISTORTION factor
|
|
|
+ANKI_RP Vec3 textureDistorted(ANKI_RP texture2D tex, sampler sampl, Vec2 uv,
|
|
|
+ Vec2 direction, // direction of distortion
|
|
|
+ Vec3 distortion) // per-channel distortion factor
|
|
|
{
|
|
|
#if ENABLE_CHROMATIC_DISTORTION
|
|
|
- return Vec3(textureLod(tex, sampl, uv + direction * DISTORTION.r, 0.0).r,
|
|
|
- textureLod(tex, sampl, uv + direction * DISTORTION.g, 0.0).g,
|
|
|
- textureLod(tex, sampl, uv + direction * DISTORTION.b, 0.0).b);
|
|
|
+ return Vec3(textureLod(tex, sampl, uv + direction * distortion.r, 0.0).r,
|
|
|
+ textureLod(tex, sampl, uv + direction * distortion.g, 0.0).g,
|
|
|
+ textureLod(tex, sampl, uv + direction * distortion.b, 0.0).b);
|
|
|
#else
|
|
|
return textureLod(tex, uv, 0.0).rgb;
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
-Vec3 ssLensFlare(Vec2 uv)
|
|
|
+ANKI_RP Vec3 ssLensFlare(Vec2 uv)
|
|
|
{
|
|
|
const Vec2 TEXEL_SIZE = 1.0 / Vec2(INPUT_TEX_SIZE);
|
|
|
const Vec3 DISTORTION = Vec3(-TEXEL_SIZE.x * CHROMATIC_DISTORTION, 0.0, TEXEL_SIZE.x * CHROMATIC_DISTORTION);
|
|
|
@@ -51,7 +51,7 @@ Vec3 ssLensFlare(Vec2 uv)
|
|
|
const Vec2 ghostVec = (Vec2(0.5) - flipUv) * GHOST_DISPERSAL;
|
|
|
|
|
|
const Vec2 direction = normalize(ghostVec);
|
|
|
- Vec3 result = Vec3(0.0);
|
|
|
+ ANKI_RP Vec3 result = Vec3(0.0);
|
|
|
|
|
|
// sample ghosts:
|
|
|
ANKI_UNROLL for(U32 i = 0u; i < MAX_GHOSTS; ++i)
|
|
|
@@ -79,9 +79,9 @@ Vec3 ssLensFlare(Vec2 uv)
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
-Vec3 upscale(Vec2 uv)
|
|
|
+ANKI_RP Vec3 upscale(Vec2 uv)
|
|
|
{
|
|
|
- Vec3 result = textureLod(u_tex, u_linearAnyClampSampler, uv, 0.0).rgb;
|
|
|
+ ANKI_RP Vec3 result = textureLod(u_tex, u_linearAnyClampSampler, uv, 0.0).rgb;
|
|
|
result += textureLodOffset(sampler2D(u_tex, u_linearAnyClampSampler), uv, 0.0, ivec2(+1, +1)).rgb;
|
|
|
result += textureLodOffset(sampler2D(u_tex, u_linearAnyClampSampler), uv, 0.0, ivec2(+1, -1)).rgb;
|
|
|
result += textureLodOffset(sampler2D(u_tex, u_linearAnyClampSampler), uv, 0.0, ivec2(-1, -1)).rgb;
|
|
|
@@ -103,7 +103,7 @@ void main()
|
|
|
|
|
|
const Vec2 uv = (Vec2(gl_GlobalInvocationID.xy) + 0.5) / Vec2(FB_SIZE);
|
|
|
|
|
|
- const Vec3 outColor = ssLensFlare(uv) + upscale(uv);
|
|
|
+ const ANKI_RP Vec3 outColor = ssLensFlare(uv) + upscale(uv);
|
|
|
imageStore(out_img, IVec2(gl_GlobalInvocationID.xy), Vec4(outColor, 0.0));
|
|
|
}
|
|
|
#pragma anki end
|