You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.5 KiB
GLSL
52 lines
1.5 KiB
GLSL
#include "core.h"
|
|
|
|
#define DAMPING 0.95
|
|
|
|
#include "watersim_common.h"
|
|
|
|
SH_BEGIN_PROGRAM
|
|
shInput(float2, UV)
|
|
shSampler2D(heightPrevSampler)
|
|
shSampler2D(heightCurrentSampler)
|
|
shUniform(float3, previousFrameOffset) @shSharedParameter(previousFrameOffset, previousFrameOffset)
|
|
shUniform(float3, currentFrameOffset) @shSharedParameter(currentFrameOffset, currentFrameOffset)
|
|
shUniform(float4, rippleTextureSize) @shSharedParameter(rippleTextureSize, rippleTextureSize)
|
|
|
|
SH_START_PROGRAM
|
|
{
|
|
#if !SH_HLSL
|
|
const float3 offset[4] = float3[4](
|
|
float3(-1.0, 0.0, 0.25),
|
|
float3( 1.0, 0.0, 0.25),
|
|
float3( 0.0,-1.0, 0.25),
|
|
float3( 0.0, 1.0, 0.25)
|
|
);
|
|
#else
|
|
const float3 offset[4] = {
|
|
float3(-1.0, 0.0, 0.25),
|
|
float3( 1.0, 0.0, 0.25),
|
|
float3( 0.0,-1.0, 0.25),
|
|
float3( 0.0, 1.0, 0.25)
|
|
};
|
|
#endif
|
|
|
|
float fHeightPrev = DecodeHeightmap(heightPrevSampler, UV.xy + previousFrameOffset.xy + currentFrameOffset.xy);
|
|
|
|
float fNeighCurrent = 0;
|
|
for ( int i=0; i<4; i++ )
|
|
{
|
|
float2 vTexcoord = UV + currentFrameOffset.xy + offset[i].xy * rippleTextureSize.xy;
|
|
fNeighCurrent += (DecodeHeightmap(heightCurrentSampler, vTexcoord) * offset[i].z);
|
|
}
|
|
|
|
float fHeight = fNeighCurrent * 2.0 - fHeightPrev;
|
|
|
|
fHeight *= DAMPING;
|
|
|
|
shOutputColour(0) = EncodeHeightmap(fHeight);
|
|
}
|
|
|
|
|
|
|
|
|