1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
uniform float2 SpaceParam; // (dx, dy)
uniform float3 EpsilonParam; // (epsilonX, epsilonY, epsilon0)
sampler2D DivergenceSampler = sampler_state
{
MinFilter = Nearest;
MagFilter = Nearest;
WrapS = Clamp;
WrapT = Clamp;
};
sampler2D PoissonSampler = sampler_state
{
MinFilter = Nearest;
MagFilter = Nearest;
WrapS = Clamp;
WrapT = Clamp;
};
void p_PoissonSolver
(
in float2 vertexTCoord : TEXCOORD0,
out float4 pixelColor : COLOR
)
{
float divergence = tex2D(DivergenceSampler, vertexTCoord).x;
float poissonPZ = tex2D(PoissonSampler,
float2(vertexTCoord.x + SpaceParam.x, vertexTCoord.y)).x;
float poissonMZ = tex2D(PoissonSampler,
float2(vertexTCoord.x - SpaceParam.x, vertexTCoord.y)).x;
float poissonZP = tex2D(PoissonSampler,
float2(vertexTCoord.x, vertexTCoord.y + SpaceParam.y)).x;
float poissonZM = tex2D(PoissonSampler,
float2(vertexTCoord.x, vertexTCoord.y - SpaceParam.y)).x;
pixelColor = EpsilonParam.z*divergence +
EpsilonParam.x*(poissonPZ + poissonMZ) +
EpsilonParam.y*(poissonZP + poissonZM);
}
|