UIBlur.cginc
#ifndef UI_BLUR_CGINC
#define UI_BLUR_CGINC
#include "UnityCG.cginc"
// Pixel size.
static const float2 ps = _ScreenParams.zw - 1.0;
// Parameters.
sampler2D _MainTex;
float _Opacity, _Size;
// Functions.
// Creates a linear blur from a projected texture.
// The blur is made centered, so the direction is always absolute.
// sp - Texture sampler.
// uv - Texture coordinates.
// dir - Blur direction vector.
float4 linear_blur(sampler2D sp, float4 uv, float2 dir) {
static const int samples = 9;
float4 color = 0.0;
// Move coordinates in opposite direction to center the sampling.
uv = UNITY_PROJ_COORD(float4(
uv.x - dir.x * samples * 0.5,
uv.y - dir.y * samples * 0.5,
uv.z,
uv.w
));
[unroll]
for (int i = 0; i < samples; ++i) {
uv = UNITY_PROJ_COORD(float4(
uv.x + dir.x,
uv.y + dir.y,
uv.z,
uv.w
));
color += tex2Dproj(sp, uv);
}
return c