#include "fluid_common.hlsli"

//	Pixel
float4 main(p_fluidsim input) : SV_Target
{
    float4 fieldL = Texture_velocity1.SampleLevel(samPointClamp, LEFTCELL, 0);
    float4 fieldR = Texture_velocity1.SampleLevel(samPointClamp, RIGHTCELL, 0);
    float4 fieldB = Texture_velocity1.SampleLevel(samPointClamp, BOTTOMCELL, 0);
    float4 fieldT = Texture_velocity1.SampleLevel(samPointClamp, TOPCELL, 0);
    float4 fieldD = Texture_velocity1.SampleLevel(samPointClamp, DOWNCELL, 0);
    float4 fieldU = Texture_velocity1.SampleLevel(samPointClamp, UPCELL, 0);

    if (IsBoundaryCell(LEFTCELL))
    {
        fieldL = GetObstVelocity(LEFTCELL);
    }
    if (IsBoundaryCell(RIGHTCELL))
    {
        fieldR = GetObstVelocity(RIGHTCELL);
    }
    if (IsBoundaryCell(BOTTOMCELL))
    {
        fieldB = GetObstVelocity(BOTTOMCELL);
    }
    if (IsBoundaryCell(TOPCELL))
    {
        fieldT = GetObstVelocity(TOPCELL);
    }
    if (IsBoundaryCell(DOWNCELL))
    {
        fieldD = GetObstVelocity(DOWNCELL);
    }
    if (IsBoundaryCell(UPCELL))
    {
        fieldU = GetObstVelocity(UPCELL);
    }

    float divergence = 0.5 *
        ((fieldR.x - fieldL.x) + (fieldT.y - fieldB.y) + (fieldU.z - fieldD.z));

    return divergence;
}
