e4s-sdk/gamedata/shaders/d3d11/fluid_divergence.ps.hlsl
2026-06-17 23:06:51 +03:00

42 lines
1.2 KiB
HLSL

#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;
}