// vertex building
verts->st[0][0] = DotProduct (vec, surf->texinfo->vecs[0]) * 0.015625f;
verts->st[0][1] = DotProduct (vec, surf->texinfo->vecs[1]) * 0.015625f;

verts->st[1][0] = DotProduct (vec, surf->texinfo->vecs[1]) * D3DX_PI / 64.0f;
verts->st[1][1] = DotProduct (vec, surf->texinfo->vecs[0]) * D3DX_PI / 64.0f;

// shader vertex struct
struct WATERVERT
{
	float4 Position: POSITION0;
	float2 TexCoord0: TEXCOORD0;
	float2 TexCoord1: TEXCOORD1;
};

// vertex shader
WATERVERT WarpVS (WATERVERT vs_in)
{
	WATERVERT vs_out;

	vs_out.Position = mul (LocalMatrix, vs_in.Position);
	vs_out.TexCoord0 = vs_in.TexCoord0;
	vs_out.TexCoord1 = vs_in.TexCoord1 + warptime; // this is just the value of cl.time

	return vs_out;
}

// Pixel shader
float4 WarpPS (WATERVERT ps_in) : COLOR0
{
	return tex2D (warpSampler, ps_in.TexCoord0 + sin (ps_in.TexCoord1) * 0.125f) * float4 (1, 1, 1, wateralpha);
}