I am using your code for motion blur effect via Metalkit, which works well, but now I want to create a filter as shown in the below video and I have modified a code also but it doesn't work as expected, so can you pls help?
kernel void blurredMotion(texture2d<float, access::read> inTexture [[ texture(0) ]],
texture2d<float, access::write> outTexture [[ texture(1) ]],
texture2d<float, access::read> lastTexture [[ texture(2) ]],
device const float *time [[ buffer(0) ]],
uint2 gid [[ thread_position_in_grid ]])
{
float width = inTexture.get_width();
float height = inTexture.get_height();
float2 uv = float2(gid) / float2(width, height);
float4 buf = lastTexture.read(gid);
float4 bri = inTexture.read(gid);
float3 grayScaleColor = float3(1.0, 0.0, 0.0);
float myGrayScale = dot(bri.rgb, grayScaleColor);
float diff = ((bri.r - buf.r) + (bri.g - buf.g) + (bri.b - buf.b)) / 3;
float colR = inTexture.read(uint2(uv.x + diff, uv.y)).r * (1.0 - diff);
float colG = inTexture.read(uint2(uv.x - diff, uv.y)).r * (1.0 - diff);
float colB = inTexture.read(uint2(uv.x - diff, uv.y)).r * (1.0 - diff);
float scanline = abs(cos(uv.y * 500.));
scanline = smoothstep(0.0, 2.0, scanline);
float3 col = float3(1.0,0.0,0.0);
col -= (0.1 * scanline);
float3 blendColor = float3(colR, colG, colB) - (0.1 * scanline);
outTexture.write(float4(blendColor, 1.0), gid);
}