// // CRLCurvedShadow_BlurBlend.cikernel // // Copyright (c) 2015, 2020 Apple Inc. All rights reserved. // kernel float4 blurBlend(sampler edge, sampler interp, sampler middle, float4 extent, float padding, float edgeOpacity, float middleOpacity) { float2 destCoord = destCoord(); float2 extentOrigin = extent.xy; float2 extentSize = extent.zw; float normalizedDistanceFromMiddle = abs((2.0 * ((destCoord.x - extentOrigin.x - padding) / (extentSize.x - (padding * 2.0)))) - 1.0); float middleTexPercent = max(0.0, (1.0 - (2.0 * normalizedDistanceFromMiddle))); float interpTexPercent = max(0.0, (1.0 - (2.0 * abs(0.5 - normalizedDistanceFromMiddle)))); float edgeTexPercent = max(0.0, ((2.0 * normalizedDistanceFromMiddle) - 1.0)); float4 edgeColor = sample(edge, samplerCoord(edge)) * edgeTexPercent; float4 interpColor = sample(interp, samplerCoord(interp)) * interpTexPercent; float4 middleColor = sample(middle, samplerCoord(middle)) * middleTexPercent; float4 opaqueResultColor = edgeColor + interpColor + middleColor; float opacity = mix(middleOpacity, edgeOpacity, normalizedDistanceFromMiddle); float4 resultColor = opaqueResultColor * opacity; return resultColor; }