This commit is contained in:
2026-04-21 22:00:00 +02:00
parent 424dea0012
commit bedeb8f059
4 changed files with 18 additions and 9 deletions
@@ -350,6 +350,11 @@ void SimulationComputePass::render() {
Gfx::PShaderBuffer pressureNext = data.velocityZBuffer;
divergencePass(divergence, pressureCurrent, data.velocityX0Buffer, data.velocityY0Buffer, data.velocityZ0Buffer, data.gridSize);
// Divergence/pressure buffers are aliased to velocity buffers whose boundary
// cells still contain stale velocity data. Zero the boundaries before solving.
setBoundsPass(divergence, 0, data.gridSize);
setBoundsPass(pressureCurrent, 0, data.gridSize);
for (int iteration = 0; iteration < pressureSolveIterations; ++iteration) {
linearSolvePass(pressureNext, pressureCurrent, divergence, 1, 6, data.gridSize);
@@ -388,6 +393,9 @@ void SimulationComputePass::render() {
Gfx::PShaderBuffer advectedPressureCurrent = data.velocityYNextBuffer;
Gfx::PShaderBuffer advectedPressureNext = data.velocityZNextBuffer;
divergencePass(advectedDivergence, advectedPressureCurrent, data.velocityXBuffer, data.velocityYBuffer, data.velocityZBuffer, data.gridSize);
setBoundsPass(advectedDivergence, 0, data.gridSize);
setBoundsPass(advectedPressureCurrent, 0, data.gridSize);
for (int iteration = 0; iteration < pressureSolveIterations; ++iteration) {
linearSolvePass(advectedPressureNext, advectedPressureCurrent, advectedDivergence, 1, 6, data.gridSize);
setBoundsPass(advectedPressureNext, 0, data.gridSize);