kernel vec4 sketch(sampler image, float strength) { vec2 d = destCoord(); vec2 bottomLeftTextureCoordinate = samplerTransform(image, d + vec2(-1.0, -1.0)); vec2 topRightTextureCoordinate = samplerTransform(image, d + vec2(1.0, 1.0)); vec2 topLeftTextureCoordinate = samplerTransform(image, d + vec2(-1.0, 1.0)); vec2 bottomRightTextureCoordinate = samplerTransform(image, d + vec2(1.0, -1.0)); vec2 leftTextureCoordinate = samplerTransform(image, d + vec2(-1.0, 0.0)); vec2 rightTextureCoordinate = samplerTransform(image, d + vec2(1.0, 0.0)); vec2 bottomTextureCoordinate = samplerTransform(image, d + vec2(0.0, -1.0)); vec2 topTextureCoordinate = samplerTransform(image, d + vec2(0.0, 1.0)); float bottomLeftIntensity = sample(image, bottomLeftTextureCoordinate).r; float topRightIntensity = sample(image, topRightTextureCoordinate).r; float topLeftIntensity = sample(image, topLeftTextureCoordinate).r; float bottomRightIntensity = sample(image, bottomRightTextureCoordinate).r; float leftIntensity = sample(image, leftTextureCoordinate).r; float rightIntensity = sample(image, rightTextureCoordinate).r; float bottomIntensity = sample(image, bottomTextureCoordinate).r; float topIntensity = sample(image, topTextureCoordinate).r; float h = -topLeftIntensity - 2.0 * topIntensity - topRightIntensity + bottomLeftIntensity + 2.0 * bottomIntensity + bottomRightIntensity; float v = -bottomLeftIntensity - 2.0 * leftIntensity - topLeftIntensity + bottomRightIntensity + 2.0 * rightIntensity + topRightIntensity; float mag = 1.0 - (length(vec2(h, v))*strength); return vec4(vec3(mag), 1.0); }