Heightfield 1.0
GPUThermalErosion Class Reference

Thermal erosion on the GPU, on a single layer heightfield. More...

#include <gputerrainsimu.h>

Public Member Functions

 GPUThermalErosion ()
 Default constructor. Does not call OpenGL because context might not have been initialized yet.
 
 ~GPUThermalErosion ()
 Destructor. Destroys the OpenGl buffers and shader program.
 
void Init (const HeightField &)
 Init function from a monolayer heightfield. OpenGL buffers are also initialized here.
 
void Init (const ScalarField2 &, const ScalarField2 &)
 Init function from a bilayer heightfield (bedrock + sediments). OpenGL buffers are also initialized here.
 
void Step (int)
 Simulate n step of thermal erosion. This function doesn't get any data back on the CPU.
 
void Step (int, const Vector2 &, double)
 Simulate n step of thermal erosion locally in a circular domain. This function doesn't get any data back on the CPU.
 
void SetUniforms (float eps, float tanThresholdAngle, bool noisifiedAngle, float noiseWavelength)
 Set the uniforms for the shader.
 
void GetData (ScalarField2 &hf)
 Reads back newest bedrock from the GPU into an initialized scalarfield.
 
void GetData (ScalarField2 &bedrock, ScalarField2 &sediments)
 Reads back newest bedrock from the GPU into an initialized scalarfield.
 
GLuint GetData () const
 Get the latest sediment elevation data buffer with no transfer back on the CPU. For monolayer heightfield, the buffer contains the full height.
 
double GetLastStepElevationDifference ()
 Computes the difference of elevation for the last simulation step. Useful for knowing if the simulation has reached steady-state.
 

Protected Attributes

GLShader simulationShader
 Compute shader.
 
GLBuffer bedrockBuffer
 Bedrock elevation buffer.
 
GLBuffer sedimentBuffer
 Sediment elevation buffer.
 
GLBuffer outSedimentBuffer
 Output sediment elevation buffer.
 
int totalBufferSize
 Total buffer size defined as nx * ny.
 
int dispatchSize
 Single dispatch size.
 
std::vector< float > tmpData
 Temporary array for retreiving GPU data.
 

Detailed Description

Thermal erosion on the GPU, on a single layer heightfield.

Member Function Documentation

◆ SetUniforms()

void GPUThermalErosion::SetUniforms ( float eps,
float tanThresholdAngle,
bool noisifiedAngle,
float noiseWavelength )

Set the uniforms for the shader.

Parameters
epsquantity to move downhill. Default is 1.0f.
tanThresholdAngletangent of the threshold angle of the material. Default is 0.57 (~30°).
noisifiedAngleflag for procedural threshold angle from a 3D noise distribution.
noiseWavelengthwavelength of the 3D noise. Default is 0.00023.

◆ Step() [1/2]

void GPUThermalErosion::Step ( int n)

Simulate n step of thermal erosion. This function doesn't get any data back on the CPU.

Parameters
nnumber of step

◆ Step() [2/2]

void GPUThermalErosion::Step ( int n,
const Vector2 & c,
double r )

Simulate n step of thermal erosion locally in a circular domain. This function doesn't get any data back on the CPU.

Parameters
nnumber of step
ccenter of the domain
rradius of the domain