// Blur.fx by Marlon Zemella

texture texture0;
float factor;

sampler Sampler0 = sampler_state
{
    Texture = (texture0);
    AddressU = Clamp;
    AddressV = Clamp;
};

struct PSInput
{
    float2 TexCoord : TEXCOORD0;
    float4 Color    : COLOR0;     // <- Entrada do dxDrawImage tocolor()
};

float4 PixelShader_Background(PSInput PS) : COLOR0
{
    float4 sum = tex2D(Sampler0, PS.TexCoord) * 1.0;
    float totalWeight = 1.0;

    float2 offsets[8] = {
        float2(factor, 0), float2(-factor, 0),
        float2(0, factor), float2(0, -factor),
        float2(factor, factor), float2(-factor, factor),
        float2(factor, -factor), float2(-factor, -factor)
    };

    float weights[8] = { 0.8, 0.8, 0.8, 0.8, 0.5, 0.5, 0.5, 0.5 };

    for (int i = 0; i < 8; i++) {
        float2 uv = saturate(PS.TexCoord + offsets[i]);
        sum += tex2D(Sampler0, uv) * weights[i];
        totalWeight += weights[i];
    }

    sum /= totalWeight;

    // Multiplica pela cor de entrada
    float safeAlpha = max(PS.Color.a, 0.05); // mínimo de transparência pra não estourar
    sum.rgb *= PS.Color.rgb;
    sum.a *= safeAlpha;

    return sum;
}

technique smoothBlur
{
    pass P0
    {
        PixelShader = compile ps_2_0 PixelShader_Background();
    }
}
