//-------------------------------------------------------------- void ftFluidSimulation::reset() { densitySwapBuffer.clear(); velocitySwapBuffer.clear(); temperatureSwapBuffer.clear(); createEdgeImage(obstacleBuffer); combinedObstacleNeedsToBeCleaned = true; }
//-------------------------------------------------------------- void ftFluidSimulation::setup(int _simulationWidth, int _simulationHeight, int _densityWidth, int _densityHeight, bool doFasterInternalFormat) { simulationWidth = _simulationWidth; simulationHeight = _simulationHeight; densityWidth = (!_densityWidth)? simulationWidth : _densityWidth; densityHeight = (!_densityHeight)? simulationHeight: _densityHeight; int internalFormatDensity, internalFormatVelocity, interformatPressure, internalFormatObstacle; if (doFasterInternalFormat) { // This gives errors with ofGLUtils, but it runs around 15% faster. internalFormatDensity = GL_RGBA32F; internalFormatVelocity = GL_RG32F; interformatPressure = GL_R32F; internalFormatObstacle = GL_RED; } else { // This gives no errors internalFormatDensity = GL_RGBA32F; internalFormatVelocity = GL_RGBA32F; interformatPressure = GL_RGBA32F; internalFormatObstacle = GL_RGB; } densitySwapBuffer.allocate(densityWidth,densityHeight,internalFormatDensity); densitySwapBuffer.clear(); velocitySwapBuffer.allocate(simulationWidth,simulationHeight,internalFormatVelocity); velocitySwapBuffer.clear(); temperatureSwapBuffer.allocate(simulationWidth,simulationHeight,interformatPressure); // temperatureSwapBuffer.clear(ambientTemperature.get()); temperatureSwapBuffer.clear(); pressureSwapBuffer.allocate(simulationWidth,simulationHeight,interformatPressure); obstacleBuffer.allocate(simulationWidth, simulationHeight, internalFormatObstacle); obstacleBuffer.clear(); createEdgeImage(obstacleBuffer); divergenceBuffer.allocate(simulationWidth, simulationHeight, internalFormatVelocity); smokeBuoyancyBuffer.allocate(simulationWidth, simulationHeight, internalFormatVelocity); smokeBuoyancyBuffer.clear(); vorticityFirstPassBuffer.allocate(simulationWidth, simulationHeight, internalFormatVelocity); vorticitySecondPassBuffer.allocate(simulationWidth, simulationHeight, internalFormatVelocity); addPressureBuffer.allocate(simulationWidth, simulationHeight, interformatPressure); addPressureBufferDidChange = false; addTempObstacleBuffer.allocate(simulationWidth, simulationHeight, internalFormatObstacle); addTempObstacleBuffer.clear(); addTempObstacleBufferDidChange = false; combinedObstacleBuffer.allocate(simulationWidth, simulationHeight, internalFormatObstacle); combinedObstacleBuffer.clear(); combinedObstacleBuffer.scaleIntoMe(obstacleBuffer); deltaTime = 0; lastTime = 0; addTempObstacleBufferDidChange = true; }
//-------------------------------------------------------------- void ftFluidSimulation::setup(int _simulationWidth, int _simulationHeight, int _densityWidth, int _densityHeight) { simulationWidth = _simulationWidth; simulationHeight = _simulationHeight; densityWidth = (!_densityWidth)? simulationWidth : _densityWidth; densityHeight = (!_densityHeight)? simulationHeight: _densityHeight; int internalFormatDensity = GL_RGBA32F; int internalFormatVelocity = GL_RG32F; int interformatPressure = GL_R32F; int internalFormatObstacle = GL_R8; densitySwapBuffer.allocate(densityWidth,densityHeight,internalFormatDensity); densitySwapBuffer.black(); velocitySwapBuffer.allocate(simulationWidth,simulationHeight,internalFormatVelocity); velocitySwapBuffer.black(); temperatureSwapBuffer.allocate(simulationWidth,simulationHeight,interformatPressure); // temperatureSwapBuffer.clear(ambientTemperature.get()); temperatureSwapBuffer.black(); pressureSwapBuffer.allocate(simulationWidth,simulationHeight,interformatPressure); obstacleBuffer.allocate(simulationWidth, simulationHeight, internalFormatObstacle); obstacleBuffer.black(); createEdgeImage(obstacleBuffer); divergenceBuffer.allocate(simulationWidth, simulationHeight, interformatPressure); smokeBuoyancyBuffer.allocate(simulationWidth, simulationHeight, internalFormatVelocity); smokeBuoyancyBuffer.black(); vorticityFirstPassBuffer.allocate(simulationWidth, simulationHeight, internalFormatVelocity); vorticitySecondPassBuffer.allocate(simulationWidth, simulationHeight, internalFormatVelocity); addPressureBuffer.allocate(simulationWidth, simulationHeight, interformatPressure); addPressureBufferDidChange = false; addTempObstacleBuffer.allocate(simulationWidth, simulationHeight, internalFormatObstacle); addTempObstacleBuffer.black(); addTempObstacleBufferDidChange = false; combinedObstacleBuffer.allocate(simulationWidth, simulationHeight, internalFormatObstacle); combinedObstacleBuffer.black(); combinedObstacleBuffer.stretchIntoMe(obstacleBuffer); deltaTime = 0; lastTime = 0; addTempObstacleBufferDidChange = true; }
//-------------------------------------------------------------- void ftFluidSimulation::resetBackground() { obstacleBuffer.clear(); createEdgeImage(obstacleBuffer); combinedObstacleNeedsToBeCleaned = true; }