| cbuffer ConstantBuffer : register(b0) |
| { |
| float4x4 qt_Matrix; |
| float qt_Opacity; |
| |
| float amplitude; |
| float frequency; |
| float time; |
| }; |
| |
| struct PSInput |
| { |
| float4 position : SV_POSITION; |
| float2 coord : TEXCOORD0; |
| }; |
| |
| PSInput VS_Wobble(float4 position : POSITION, float2 coord : TEXCOORD0) |
| { |
| PSInput result; |
| result.position = mul(qt_Matrix, position); |
| result.coord = coord; |
| return result; |
| } |
| |
| Texture2D source : register(t0); |
| SamplerState sourceSampler : register(s0); |
| |
| float4 PS_Wobble(PSInput input) : SV_TARGET |
| { |
| float2 p = sin(time + frequency * input.coord); |
| return source.Sample(sourceSampler, input.coord + amplitude * float2(p.y, -p.x)) * qt_Opacity; |
| } |