Shader "ubu/processing/pix_diff"
{
   Properties
   {
      _Axis ("Axis", Integer) = 0
   }
   SubShader
   {
      // No culling or depth
      Cull Off ZWrite Off ZTest Always

      Pass
      {
         CGPROGRAM
         #pragma vertex vert
         #pragma fragment frag

         #include "UnityCG.cginc"

         struct appdata
         {
            float4 vertex : POSITION;
            float2 uv : TEXCOORD0;
         };

         struct v2f
         {
            float2 uv : TEXCOORD0;
            float4 vertex : SV_POSITION;
         };

         v2f vert (appdata v)
         {
            v2f o;
            o.vertex = UnityObjectToClipPos(v.vertex);
            o.uv = v.uv;
            return o;
         }

         sampler2D _Reference;
         half4 _Reference_TexelSize;

         sampler2D _Target;

         int _Axis;
         int _Stage;
         fixed4 frag (v2f i) : SV_Target
         {
            float2 co = i.uv * _Reference_TexelSize.zw;
            float2 grid = floor(co/8.0)*8.0;
            float2 uv = frac(co/8.0)*8.0;
            float4 s = float4(0,0,0,0);

            for( int j=-1; j<9; j ++ )
            {
               float2 p0 = grid + 0.5;
               if( _Axis == 0 )
               {
                  p0 += float2(j,floor(uv.y));
                  float4 r = tex2D( _Reference, p0*_Reference_TexelSize.xy );
                  float4 t = tex2D( _Target,    p0*_Reference_TexelSize.xy );
                  s += abs( t-r );
               }
               else
               {
                  p0 += float2(0,j);
                  float4 t = tex2D( _Target, p0*_Reference_TexelSize.xy );
                  s += t;
               }
            }

            return saturate( s );
         }
         ENDCG
      }
   }
}
