#include "common.hlsli"

struct     v2p
{
    float2 tc0: TEXCOORD0;    // base
    float3  tc1: TEXCOORD1;    // environment
    float4  c0:  COLOR0;       // sun.(fog*fog)
};

//////////////////////////////////////////////////////////////////////////////////////////

float  resize(float input, float factor, float offset)
{
    return (input-0.5f+offset) / factor+0.5f-offset;
}

// Pixel
uniform float4 screen_res;
uniform float4 m_hud_params;
uniform float4 m_zoom_deviation;

uniform sampler2D s_vp2;

float4 main ( v2p I ) : COLOR
{
    // Производим выборку правой и левой половин текстуры с сеткой
    float2 coords = I.tc0;
    coords.x *= 0.5;
    float4 base2 = tex2D(s_base, coords);
    coords.x += 0.5;
    float4 t_base = tex2D(s_base, coords);
    // Миксуем половинки в соответствии с текущим уровнем подсветки
    t_base = lerp(base2, t_base, m_zoom_deviation.z);

    //сдвиг от состояния оружия
    I.tc0.x = I.tc0.x+m_zoom_deviation.x;
    I.tc0.y = I.tc0.y+m_zoom_deviation.y;

    // Растягиваем картинку в линзе так, чтобы на любом разрешении экрана были правильные пропорции
    I.tc0.x = resize(I.tc0.x, screen_res.x/screen_res.y, 0);
    float4 t_vp2 = tex2D(s_vp2, I.tc0);

    float2 offset = distance(I.tc0, float2( .5f, .5f )) * float2(m_hud_params.z, m_hud_params.z);

    // Абберация
    t_vp2.r = tex2D( s_vp2, I.tc0+offset).r;
    t_vp2.b = tex2D( s_vp2, I.tc0-offset).b;

    // Миксуем всё и собираем финальную картинку
    float3 final = lerp(t_vp2, t_base, t_base.a);

    // out
    return float4(final.r, final.g, final.b, min(m_hud_params.y, m_hud_params.a));
}
